线段树合并

#include<cstdio>
using namespace std;
int cnt,F[100005],ls[2000005],rs[2000005],ID[2000005],sz[2000005],root[100005];
char s[15];
int find(int x){if (F[x]!=x) F[x]=find(F[x]);return F[x];
}
void insert(int &t,int l,int r,int x,int y){if (!t) t=++cnt;sz[t]++;if (l==r){ID[t]=y;return;}int mid=(l+r)>>1;if (x<=mid) insert(ls[t],l,mid,x,y);else insert(rs[t],mid+1,r,x,y);
}
int query(int t,int l,int r,int K){if (l==r) return ID[t];int mid=(l+r)>>1;if (K<=sz[ls[t]]) return query(ls[t],l,mid,K);else return query(rs[t],mid+1,r,K-sz[ls[t]]);
}
int merge(int x,int y){if (!x || !y) return x^y;sz[x]+=sz[y];ls[x]=merge(ls[x],ls[y]);rs[x]=merge(rs[x],rs[y]);return x;
}
int main(){int n,m;scanf("%d%d",&n,&m);for (int i=1; i<=n; i++){int x;scanf("%d",&x);insert(root[i],1,n,x,i);}for (int i=1; i<=n; i++) F[i]=i;for (int i=1; i<=m; i++){int x,y;scanf("%d%d",&x,&y);int fx=find(x),fy=find(y);if (fx!=fy) {F[fy]=fx;root[fx]=merge(root[fx],root[fy]);}}int q;scanf("%d",&q);while (q--){scanf("%s",s);if (s[0]=='Q'){int x,k;scanf("%d%d",&x,&k);int fx=find(x);if (sz[root[fx]]<k) printf("-1\n");else printf("%d\n",query(root[fx],1,n,k));}else{int x,y;scanf("%d%d",&x,&y);int fx=find(x),fy=find(y);if (fx!=fy){F[fy]=fx;root[fx]=merge(root[fx],root[fy]);}}}return 0;
}

  

转载于:https://www.cnblogs.com/silenty/p/9838659.html

BZOJ 2733: [HNOI2012]永无乡相关推荐

  1. BZOJ 2733: [HNOI2012]永无乡 [splay启发式合并]

    2733: [HNOI2012]永无乡 题意:加边,询问一个连通块中k小值 终于写了一下splay启发式合并 本题直接splay上一个节点对应图上一个点就可以了 并查集维护连通性 合并的时候,把siz ...

  2. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap

    2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  3. bzoj 2733: [HNOI2012]永无乡(线段树启发式合并)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3850  Solved: 2061 [Submit][Sta ...

  4. BZOJ[2733][HNOI2012]永无乡 Splay启发式合并

    题目链接 题目大意及线段树合并解法在这里 每合并两个点,将它俩启发式合并 启发式合并,即把小的暴力往大的那里插 说按前序遍历插复杂度会极其优越?? 第k大是平衡树基本操作 代码如下: #include ...

  5. [Bzoj2733][Hnoi2012] 永无乡(BST)(Pb_ds tree)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 4108  Solved: 2195 [Submit][Sta ...

  6. 数据结构之fhq-treap——Chef and Sets,[HNOI2012]永无乡,Play with Chain,[NOI2005]维修数列(结构体版代码)

    因为非常板,所以主要是代码 Tyvj 1728 普通平衡树 Chef and Sets [HNOI2012]永无乡 Play with Chain [NOI2005]维修数列 题目很水,所以可能会出现 ...

  7. P3224 [HNOI2012]永无乡(并查集+权值线段树合并/平衡树)

    [HNOI2012]永无乡 Code1 权值线段树天然支持merge,线段树上二分求第k小 #include<bits/stdc++.h>using namespace std; usin ...

  8. [BZOJ2733] [HNOI2012] 永无乡 (splay启发式合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  9. [HNOI2012]永无乡

    题目描述 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另 ...

最新文章

  1. mysql中vlookup函数_wps表中vlookup函数使用方法将一表引到另一表
  2. SAP云采购解决方案入华在即
  3. python list的一个面试题
  4. 关于MYsql 多字段排序
  5. 01背包初始化的细节问题与循环下限的改进
  6. linux配置ip地址 routes,CentOS 7 设置网络IP地址(示例代码)
  7. 操作系统复习笔记 02-03 OS Structure 操作系统结构
  8. java技术难点_Java核心技术第四章----对象与类重难点总结
  9. 从PRISM开始学WPF(九)交互Interaction?
  10. Python--26 简单定制 计时器
  11. 搞笑创意海报灵感|终于知道设计该怎么做了!
  12. 高性能mysql 第5章 创建高可用的索引
  13. 关于RestTemplate的小笔记
  14. FireFox 32不支持64位的NPAPI dll插件
  15. VBScript Sample:遍历文件夹并获取XML文件中指定内容
  16. SQL Server 2008 索引超出了数组界限
  17. 一步步学习微软InfoPath2010和SP2010--第五章节--添加逻辑和规则到表单(1)--InfoPath中初级类型的表单逻辑
  18. 领跑衫获奖感言 课程总结
  19. Excel辅助“校验”
  20. python不知道吃什么_一个人不知道吃什么?找出我做的一个人的食物

热门文章

  1. 删除ELK中的数据。。
  2. python __setattr__和__getattr__
  3. logistics模型的训练
  4. 利用appscan进行自动化定期安全测试
  5. CompTIA IT Fundamentals认证考试的相关信息【2018.06.05更新】
  6. protel中PCB板大小的自定义方法
  7. 【python】mysql的操作
  8. 【elasticsearch】elasticsearch 升级
  9. 软件测试--接口流程化测试
  10. 怎么样使用Badboy工具录制JMeter脚本