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 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...
随机推荐
- 解决win7设置默认程序打开方式失效
问题描述 我在设置一个文件(.ui)的默认程序打开,总是失效.设置不成功. 原因 正常这个程序应该用 designer.exe 打开,但是我之前设置过(.ui)默认程序打开程序为designer.ex ...
- 重新认识下JVM级别的本地缓存框架Guava Cache(3)——探寻实现细节与核心机制
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 通过<重新认识下JVM级别的本地 ...
- pyftpdlib中文乱码问题解决方案
python实现简易的FTP服务器 from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import F ...
- python字符串常用方法介绍,基于python3.10
python字符串常用方法-目录: 1.strip().lstrip().rstrip()2.removeprefix().removesuffix()3.replace()4.split().rsp ...
- 5V升压12.6V芯片电路图,三节锂电池充电
三节3.7V的锂电池串联,11.1V和最大12.6V锂电池充电电路的解决方案.在应用中,一般使用低压5V,如USB口直接输入的给三串锂电池充电,还有是15V或者18V,20V输入降压给锂电池充电的两种 ...
- 彻底理解Python中的闭包和装饰器(下)
上篇讲了Python中的闭包,本篇要讲的装饰器就是闭包的一个重要应用. 如果你还不知道什么是闭包,猛戳这里阅读:彻底理解Python中的闭包和装饰器(上) 什么是装饰器 装饰器的作用是在不修改函数定义 ...
- Django重点及面试题
Django 简述python三大主流web框架 """ django 大而全,类似于航空母舰 但是有时候过于笨重 flask 小而精,类似于游骑兵(单行代码就可以起一个 ...
- AcWing1137. 选择最佳线路
题目传送门 题目大意 \(\qquad\)有一张有向图,可以有若干个起点,只有一个终点,求所有起点到终点的最短路中最短的一条,若所有起点都与终点不连通,则输出\(-1\) 解题思路 \(\qquad\ ...
- k8s本地联调工具kt-connect
1.Kt Connect简介 KT Connect ( Kubernetes Developer Tool ) 是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具.其核心是通过建立本 ...
- 1_ios系统httpstatus状态为0
这两天在开发中遇到了一个很奇怪的问题,我有一个上传文件的接口,在安卓系统运行完全没问题,但是一使用苹果系统运行就报错,看了下控制台和Network,发现HTTPStatus的状态为0 从来没见过状态返 ...