JZOJ 5174
\(\text{Problem}\)
给你一张 \(n\) 个结点,\(m\) 条边的无向图,每个结点都有一个整数权值。你需要执行一系列操作。操作分为三种,如下表所示。
操作
备注
\(\text{D x (1<=x<=m)}\)
删除编号为x的边。输入保证每条边至多被删除一次。
\(\text{Q x k (1<=x<=n)}\)
计算出结点x所在的联通块中,第k大的权值。如果不存在,输出 \(0\)。
\(\text{C x v (1<=x<=n)}\)
把结点 \(x\) 的权值改为 \(v\)。
操作序列的结束标志为单个字母 \(E\) 。结点编号为 \(1\) 到 \(n\),边的编号为 \(1\) 到 \(m\)。
\(\text{Solution}\)
参见 \(\text{HNOI2012}\) 永无乡
因为删边的操作并不容易实现,而题目有没要求在线
于是考虑离线变删边为加边
那就和那题一样了
注意值域与空间
\(\text{Code}\)
#include<cstdio>
using namespace std;
const int N = 2e4 + 5, QN = 3e5 + 5, Sz = 2e5 * 45;
int L, R, n, m, q, size, fa[N], a[N], rt[N], ans[QN];
int sum[Sz], ls[Sz], rs[Sz];
struct node{int x, y, w;}E[3 * N], Q[2 * QN];
inline void read(int &x)
{
x = 0; char ch = getchar(); int f = 1;
while (ch < '0' || ch > '9') f = (ch == '-' ? -1 : f), ch = getchar();
while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
x *= f;
}
inline void pushup(int p){sum[p] = sum[ls[p]] + sum[rs[p]];}
void merge(int &x, int y, int l, int r)
{
if (!x || !y) return void(x += y);
if (l == r) return void(sum[x] += sum[y]);
int mid = (l + r) >> 1;
merge(ls[x], ls[y], l, mid);
merge(rs[x], rs[y], mid + 1, r);
pushup(x);
}
int find(int x){return (fa[x] == x ? x : fa[x] = find(fa[x]));}
inline void dsu_union(int x, int y)
{
int u = find(x), v = find(y);
if (u == v) return;
fa[v] = fa[u];
merge(rt[u], rt[v], L, R);
rt[v] = 0;
}
void update(int &p, int l, int r, int x, int v)
{
if (!p) p = ++size;
if (l == r) return void(sum[p] += v);
int mid = (l + r) >> 1;
if (x <= mid) update(ls[p], l, mid, x, v);
else update(rs[p], mid + 1, r, x, v);
pushup(p);
}
int query(int p, int l, int r, int x)
{
if (sum[p] < x) return 0;
if (l == r) return l;
int mid = (l + r) >> 1;
if (sum[rs[p]] >= x) return query(rs[p], mid + 1, r, x);
return query(ls[p], l, mid, x - sum[rs[p]]);
}
int main()
{
L = -1e6, R = 1e6;
read(n), read(m);
for(int i = 1; i <= n; i++) read(a[i]);
for(int i = 1, x, y; i <= m; i++) read(E[i].x), read(E[i].y), E[i].w = 1;
char op[5];
for(int i = 1, x, y; ; i++)
{
scanf("%s", op);
if (op[0] == 'E') break;
read(x);
if (op[0] == 'D') E[x].w = 0, Q[i] = node{x, 0, 1};
else if (op[0] == 'Q') read(y), Q[i] = node{x, y, 2};
else read(y), Q[i] = node{x, a[x], 3}, a[x] = y;
q = i;
}
for(int i = 1; i <= n; i++) fa[i] = i, update(rt[i], L, R, a[i], 1);
for(int i = 1; i <= m; i++)
if (E[i].w == 1) dsu_union(E[i].x, E[i].y);
for(int i = q; i; i--)
{
if (Q[i].w == 1) dsu_union(E[Q[i].x].x, E[Q[i].x].y);
else{
int now = rt[find(Q[i].x)];
if (Q[i].w == 2) ans[++ans[0]] = query(now, L, R, Q[i].y);
else update(now, L, R, a[Q[i].x], -1), update(now, L, R, a[Q[i].x] = Q[i].y, 1);
}
}
for(int i = ans[0]; i; i--) printf("%d\n", ans[i]);
}
JZOJ 5174的更多相关文章
- Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174 题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:A[i−1] ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- [jzoj]2938.【NOIP2012模拟8.9】分割田地
Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...
- [jzoj]2505.【NOIP2011模拟7.29】藤原妹红
Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...
随机推荐
- NLP手札1. 金融信息负面及主体判定方案梳理&代码实现
这个系列会针对NLP比赛,经典问题的解决方案进行梳理并给出代码复现~也算是找个理由把代码从TF搬运到torch.Chapter1是CCF BDC2019的赛题:金融信息负面及主体判定,属于实体关联的情 ...
- tostring、(string)和 String.valueOf()
上周遇到一个问题,只怪自己平时没注意这个细节,从数据库取数据在map集合里,取出该值是我用了.tostring的方法,一次在当取出数据为空时代码报java.lang.NullPointerExcept ...
- Zabbix与乐维监控对比分析(一)——架构、性能篇
近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头:而作为后起的新锐IT监控平台--乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平台的优点 ...
- 【Java SE】Day01 前言、入门程序、常量、变量
回顾一下Java之前学的内容 Day01 前言.入门程序.常量.变量 一.基础知识 莱布尼茨发明二进制,辗转相除与8421位权法互转,1B=1bit=1字节=8位=8byte dos cls清屏dir ...
- 【每日一题】【链表or双指针循环条件】2022年2月26日-NC96 判断一个链表是否为回文结构
描述给定一个链表,请判断该链表是否为回文结构.回文是指该字符串正序逆序完全一致. 思路: public boolean isPail (ListNode head) { ListNode node = ...
- MongoDB数据库与Python的交互
一.缘由 这是之前学习的时候写下的基础代码,包含着MongDB数据库和Python交互的基本操作. 二.代码实现 import pymongo #连接数据库 client=pymongo.MongoC ...
- Ubuntu20.04更换国内镜像源(阿里、网易163、清华、中科大)
更换方法 Ubuntu采用apt作为软件安装工具,其镜像源列表记录在/etc/apt/source.list文件中. 首先将source.list复制为source.list.bak备份,然后将sou ...
- Python 缩进语法的起源:上世纪 60-70 年代的大胆创意!
上个月,Python 之父 Guido van Rossum 在推特上转发了一篇文章<The Origins of Python>,引起了我的强烈兴趣. 众所周知,Guido 在 1989 ...
- 铁威马NAS添加SSL证书实现HTTPS安全访问
如何让你的铁威马NAS域名可以支持HTTPS呢?其实想要支持HTTPS,只需要获取第三方签发的证书,信任你的域名就可以啦! 在铁威马TOS 4.2系统中,允许用户导入安全证书,或者自我颁发安全证书,这 ...
- ob_DES_艺恩
网站 aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s 抓包返回密文 点到initator,PostA ...