BZOJ 2733 线段树的合并 并查集
来源:互联网 发布:ipowerl软件下载 编辑:程序博客网 时间:2024/05/22 21:24
思路:
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(); }}
0 0
- BZOJ 2733 线段树的合并 并查集
- BZOJ-2733 永无乡 合并线段树 并查集
- bzoj 4399 魔法少女 权值线段树合并+并查集
- BZOJ 3211 线段树+并查集
- BZOJ 2733 [HNOI2012] 永无乡 [线段树+并查集做法]
- Hotel ----线段树并查集,区间合并
- 【bzoj4530】[Bjoi2014]大融合 并查集+线段树合并
- [BZOJ2733][HNOI2012永无乡][线段树合并+并查集]
- bzoj2733 [ HNOI2012 ] -- 并查集+线段树合并
- BJOI2014 大融合 并查集+线段树合并
- [bzoj2733][HNOI2012]永无乡 线段树合并+并查集
- BZOJ 3319 黑白树 并查集+线段树
- BZOJ 4551 树 dfs序+线段树 / 并查集
- 并查集+线段树 BZOJ 3038: 上帝造题的七分钟2
- BZOJ 2212线段树的合并
- [线段树合并] BZOJ 2733 永无乡
- BZOJ 2733 永无乡 [线段树合并]
- bzoj 2733 永无乡 线段树启发式合并
- 结合YUI Compressor在WebStrom添加Watcher实现编辑js文件时自动压缩(包括自定义监听范围Scope)
- 自定义控件之滑动解锁、圆中嵌字
- Java编程:组合、继承和代理的区别
- 架构师米洛:不懂技术的人不要对懂技术的人说这很容易实现
- 纸牌博弈(DP)
- BZOJ 2733 线段树的合并 并查集
- javascript重点-数据类型
- 您的时钟快了
- 139. Word Break -Medium
- Mac下如何安装iTerm2并使用zsh iTerm2
- APUE-第四章-习题笔记
- 为 Markdown 图片加上大小吧!
- isolate_lru_pages
- Leetcode 441 - Arranging Coins(Math)