思路:

1.线段树合并(nlogn的)

2.splay+启发式合并

线段树合并比较好写

我手懒

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100050;
int n,m,q,a[N],f[N],xx,yy,son[N*50][2],tr[N*50],root[N],cnt,rev[N];
char op[10];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void push_up(int x){tr[x]=tr[son[x][0]]+tr[son[x][1]];}
void insert(int &x,int l,int r,int wei){
if(!x)x=++cnt;
if(l==r){tr[x]++;return;}
int mid=(l+r)>>1;
if(mid<wei)insert(son[x][1],mid+1,r,wei);
else insert(son[x][0],l,mid,wei);
push_up(x);
}
int merge(int x,int y){
if(!y||!x)return x^y;
son[x][0]=merge(son[x][0],son[y][0]),
son[x][1]=merge(son[x][1],son[y][1]);
push_up(x);return x;
}
int query(int x,int l,int r,int num){
if(l==r)return l;
int mid=(l+r)>>1;
if(tr[son[x][0]]>=num)return query(son[x][0],l,mid,num);
return query(son[x][1],mid+1,r,num-tr[son[x][0]]);
}
void add(){
int fx=find(xx),fy=find(yy);
if(fx!=fy)root[fx]=merge(root[fx],root[fy]),f[fy]=fx;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),f[i]=i,insert(root[i],1,n,a[i]),rev[a[i]]=i;
while(m--)scanf("%d%d",&xx,&yy),add();
scanf("%d",&q);
while(q--){
scanf("%s%d%d",op,&xx,&yy);
if(op[0]=='Q')printf("%d\n",tr[root[find(xx)]]<yy?-1:rev[query(root[find(xx)],1,n,yy)]);
else add();
}
}

最新文章

  1. JS实现页面打印
  2. 微软How old do I Look——初体验
  3. 可复用View的PagerAdapter
  4. 全自动编译FFmpeg(含x264,fdk aac,libmp3lame,libvpx等第3方库)
  5. poj 1789 Truck History 最小生成树
  6. Javascript与Flex AS3的交互
  7. (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明
  8. 内核与ramdisk到底是什么关系
  9. JAX-RS开发 hello world
  10. shell注意事项
  11. 手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring
  12. ORM(二)常用字段小记
  13. Centos将yum源设置为阿里云的镜像源
  14. bee: command not found问题解决之道
  15. in exists
  16. python import 包的路径以及相对路径加载的问题
  17. [Java核心技术]第四章-对象与类(4.1-4.6总结)
  18. Innodb引擎状态查看
  19. 高可用OpenStack(Queen版)集群-15.Glance&amp;Cinder集成Ceph
  20. Clojure 下的 xpath 库

热门文章

  1. 使用原生JS实现简单的ajax
  2. android黑科技系列——破解游戏之修改金币数
  3. [原创]C++中一些重要概念
  4. Jenkins介绍-安装-部署...
  5. WP - 控件基础-按钮控件
  6. PHP 判断一个字符是否在字符串中
  7. JsonNetResult
  8. Python笔记11------一个K-means聚类的小例子
  9. 洛谷P1914 小书童——密码
  10. 基于vue的可视化编辑器