[loj519]数学上来先打表
建立操作树,即1和3操作时i-1向i连边,2操作中k向i连边,然后dfs一遍
那么当我们走到一个节点,就执行该操作(修改也是操作),退出后取消该操作即可
于是相当于要维护一个东西,支持:1.加边;2.删边;3.询问联通块的第k小
容易想到按秩合并并查集,考虑询问操作:用分块,维护每一个权值块的权值数量(要离散)
然后就可以确定答案所在权值块,再依次枚举里面的权值并判断是否在联通块内即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define K 1000
5 #define bl(k) ((k-1)/K)
6 struct ji{
7 int nex,to;
8 }edge[N];
9 vector<int>v[N];
10 int E,n,m,p[N],a[N],x[N],y[N],b[N],head[N],sz[N],fa[N],ans[N],f[N][105];
11 bool cmp(int x,int y){
12 return a[x]<a[y];
13 }
14 void add(int x,int y){
15 edge[E].nex=head[x];
16 edge[E].to=y;
17 head[x]=E++;
18 }
19 int find(int k){
20 if (k==fa[k])return k;
21 return find(fa[k]);
22 }
23 int query(int k){
24 x[k]=find(x[k]);
25 for(int i=0;i<=bl(n);i++)
26 if (y[k]>f[x[k]][i])y[k]-=f[x[k]][i];
27 else
28 for(int j=i*K+1;j<=(i+1)*K;j++)
29 if ((find(b[j])==x[k])&&(--y[k]==0))return a[b[j]];
30 return -1;
31 }
32 void add(int k){
33 x[k]=find(x[k]);
34 y[k]=find(y[k]);
35 if (x[k]==y[k])return;
36 if (sz[x[k]]>sz[y[k]])swap(x[k],y[k]);
37 fa[x[k]]=y[k];
38 sz[y[k]]+=sz[x[k]];
39 for(int i=0;i<=bl(n);i++)f[y[k]][i]+=f[x[k]][i];
40 }
41 void del(int k){
42 if (x[k]==y[k])return;
43 fa[x[k]]=x[k];
44 sz[y[k]]-=sz[x[k]];
45 for(int i=0;i<=bl(n);i++)f[y[k]][i]-=f[x[k]][i];
46 }
47 void dfs(int k){
48 if (p[k]==1)add(k);
49 if (p[k]==3)ans[k]=query(k);
50 for(int i=head[k];i!=-1;i=edge[i].nex)dfs(edge[i].to);
51 if (p[k]==1)del(k);
52 }
53 int main(){
54 scanf("%d%d",&n,&m);
55 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
56 memset(head,-1,sizeof(head));
57 for(int i=1;i<=n;i++)fa[i]=b[i]=i;
58 sort(b+1,b+n+1,cmp);
59 for(int i=1;i<=n;i++)sz[i]=f[b[i]][bl(i)]=1;
60 for(int i=1;i<=m;i++){
61 scanf("%d%d",&p[i],&x[i]);
62 if (p[i]==2)add(x[i],i);
63 else{
64 scanf("%d",&y[i]);
65 add(i-1,i);
66 }
67 }
68 dfs(0);
69 for(int i=1;i<=m;i++)
70 if (p[i]==3)printf("%d\n",ans[i]);
71 }
[loj519]数学上来先打表的更多相关文章
- 汕头市队赛 SRM10 T3 数学上来先打表
数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两 ...
- 【STSRM10】数学上来先打表
[算法]DP+数学计数 [题意]给出n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案(对1004535809取模): 1.每条边连接两个不同的点,每两个点之间至多有一条边. 2.不存在 ...
- LibreOJ β Round #2 F. 数学上来先打表
传送门 题解 做法与题解基本无异,不过他说用vector我觉得用链表来得更好一些. #include<queue> #include<ctime> #include<bi ...
- F. 数学上来先打表
题解: 搞这题搞了一天 思维不是很难 就是暴力压位bitset 分块做法速度更快 但是stl里的不能实现这个功能 所以手动实现 64位压一位 到65535跑一下1的个数 然后(x>>16) ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...
- 【NOIP模拟赛】 permutation 数学(打表)
biubiu~~~ 这道题卡读题卡得很死......首先他告诉我们读循环的时候要顺着圈读,然后又说这个圈在数列上要以最大数开始读,而且以这样的循环的首数排序,得到的序列与原序列一样那么他就是可行序列, ...
- Latex数学符号对应表
1. 希腊字母 字母 实现 字母 实现 $\alpha$ \alpha $\Alpha$ \Alpha $\beta$ \beta $\Beta$ \Beta $\gamma$ \gamma $\Ga ...
- Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- [日常] NOIP前集训日记
写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...
随机推荐
- Python | 一键生成九宫格图片
一键生成九宫格图片 首先我们准备几张图片: 将代码文件放在放置图片的地方,用软件打开: 点击运行,在当前目录下会生成一个文件夹: 打开新生成的文件夹: 打开对应图片的名称文件夹: 如果不想图片被分成9 ...
- Azure Tips 第一期: Azure 中的安全监视工具,数据存储, 动态数据屏蔽以及资源部署
# 1 Azure 中的安全监视工具 微软 Azure 云提供以下监控工具,可用于观察操作和检测异常行为. Azure 安全中心 Azure 安全中心是一个统一的基础结构安全管理系统,可以增强数据中心 ...
- bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)
题目大意 给定n个元素的数列,每一个元素有x和y两种元素,现在有三种操作: \(1\ L\ R\) 设\(xx\)为\([l,r]\)的元素的\(x_i\)的平均值,\(yy\)同理 求 \(\fra ...
- 关于十二生肖的数学发现(C++)
把数字看成是年份,然后根据生肖赋值.这里把鼠年赋值为1,牛年赋值为2,虎年赋值为3,兔年赋值为4,龙年赋值为5,蛇年赋值为6,马年赋值为7,羊年赋值为8,猴年赋值为9,鸡年赋值为10,狗年赋值为11, ...
- 远程设备管理opendx平台搭建-appium和adb的安装
多年不见了,说起来也有3年了我又开始写博客了,这几年我还是没啥长进,还是干测试,但是测试行业的话,我已经成了一个测开了,也在搭建自己的测试网站 本系列文章讲述的是一个系列的第一部分,最终可以搭建一整套 ...
- 【数据结构与算法Python版学习笔记】树——相关术语、定义、实现方法
概念 一种基本的"非线性"数据结构--树 根 枝 叶 广泛应用于计算机科学的多个领域 操作系统 图形学 数据库 计算机网络 特征 第一个属性是层次性,即树是按层级构建的,越笼统就越 ...
- 从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)
纸上得来终觉浅,绝知此事要躬行 注意: 本文 SpringBoot 版本为 2.5.2; JDK 版本 为 jdk 11. 前言: 前文:你了解SpringBoot启动时API相关信息是用什么数据结构 ...
- [no code][scrum meeting] Beta 8
$( "#cnblogs_post_body" ).catalog() 例会时间:5月22日15:30,主持者:赵涛 下次例会时间:5月23日11:30,主持者:肖思炀 一.工作汇 ...
- BUAA-软件工程-个人总结与心得
提问回顾以及个人总结 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 学习软件开发的过程,团队之间的写作 ...
- BUAA-OO-最后单元总结
BUAA-OO-最后单元总结 经过一学期的魔鬼"折磨"后,OO课程终于要结束了!总体来说我对于作业的总体完成情况还是比较满意的,希望最后可以取得一个理想成绩. 一.第四单元架构设计 ...