题目链接:https://cn.vjudge.net/problem/HYSBZ-2733

题解:先用并查集统计哪些岛是相连的,然后每个块动态开权值线段树,每两个岛相连就是把两个块的权值线段树合并起来,查询就是从并查集中寻找那个块,然后查询第k大。注意:(这个题的读入字符要用字符串读入,否则会出错);

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node
{int num,l,r;
} s[maxn*40];
int tot;
void init()
{memset(s,0,sizeof(s));tot=0;
}int add(int l,int r,int num)
{s[++tot].num++;int x=tot;if(l==r) return x;int mid=(l+r)>>1;if(num<=mid) s[x].l=add(l,mid,num);else s[x].r=add(mid+1,r,num);return x;
}void hebing(int x,int y)
{s[x].num+=s[y].num;if(s[s[x].l].num==0) s[x].l=s[y].l;else if(s[s[x].l].num&&s[s[y].l].num) hebing(s[x].l,s[y].l);if(s[s[x].r].num==0) s[x].r=s[y].r;else if(s[s[x].r].num&&s[s[y].r].num) hebing(s[x].r,s[y].r);
}
int query(int x,int l,int r,int k)
{if(k<=0||k>s[x].num) return -1;int num=s[s[x].l].num;if(l==r) return l;int mid=(l+r)>>1;if(k<=num) return query(s[x].l,l,mid,k);else return query(s[x].r,mid+1,r,k-num);
}
int a[maxn],b[maxn],pre[maxn],ll[maxn];
int fin(int x)
{if(pre[x]==x) return x;else return pre[x]=fin(pre[x]);
}
void pan(int u,int v)
{u=a[u]; v=a[v];int x=fin(u);int y=fin(v);if(x!=y){if(s[ll[x]].num<s[ll[y]].num) hebing(ll[y],ll[x]),pre[x]=y;else hebing(ll[x],ll[y]),pre[y]=x;}
}
int main()
{int n,m;scanf("%d %d",&n,&m);init();b[0]=-1;for(int i=1; i<=n; i++) scanf("%d",&a[i]),b[a[i]]=i;for(int i=1; i<=n; i++) pre[i]=i;for(int i=1; i<=n; i++) ll[i]=add(1,n,i);int u,v,q;char ii[10];for(int i=1; i<=m; i++){scanf("%d %d",&u,&v);pan(u,v);}scanf("%d",&q);while(q--){scanf("%s %d %d",ii,&u,&v);if(ii[0]=='B'){pan(u,v);}else{int x=fin(a[u]);printf("%d\n",b[max(query(ll[x],1,n,v),0)]);}}return 0;
}
/*
5 1
4 3 2 5 1
1 2
7
Q 3 2
Q 2 1
B 2 3
B 1 5
Q 2 1
Q 2 4
Q 2 3
*/

永无乡 HYSBZ - 2733相关推荐

  1. bzoj2733永无乡

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

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

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

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

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

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

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

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

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

  6. [bzoj2733]永无乡 [bzoj1503]郁闷的出纳员

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1321  Solved: 693 [Submit][Stat ...

  7. 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf

    文章目录 [HNOI2012]永无乡 Lomsat gelral 「POI2011 R2 Day2」旋转树木 Tree Rotations Escape Through Leaf 线段树合并与 fhq ...

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

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

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

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

最新文章

  1. Dominating Patterns
  2. 每日站立会议4-20(张硕)
  3. 【错误记录】Google Play 上架报错 ( 您的应用包含违反“元数据”政策的内容 | GP 政策中心 )
  4. vivado实现VGA
  5. Web布局连载——两栏固定布局(五)
  6. 【maven插件】asciidoctor-maven-plugin:编译Asciidoc
  7. 如何快速学习freemarker以及使用经验
  8. 历史版本_新版本爆料第弹丨英雄练习新去处,荣耀历史秀出来!
  9. sqlMapConfig.xml配置文件详解
  10. 【Spring】bean的作用域
  11. 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
  12. WP7开发解惑(转载)
  13. 阿里云CentOS7服务器搭建邮件服务器,端口:465
  14. [日推荐]『驾考宝典App』学车驾考必过宝典
  15. 220套html模版百度云,220套静态网页模板
  16. 设置低电平有效,即取反
  17. js文字转图片,使用画布绘制
  18. 通用计算机含义,当今的计算机其通用的名称应该是通用数字计算机,请简单描述包含的三层含义? (8.0分)...
  19. 电源学习总结(三)——线性稳压的参数
  20. vue3解读—reactivity响应式实现

热门文章

  1. 聚类dbi指数_聚类中的性能度量
  2. 高德地图实现框选,区域选择(vue,原生页面同用)
  3. 大学生应对面试宝典(电话、现场面试)
  4. 攻防世界 happyctf
  5. 2020,神策数据 +
  6. Fabric架构原理总结
  7. 3GPP TS 23501-g51 中英文对照 | 5.3.2 Registration Management
  8. GEMU 107-263 8A 250V
  9. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR之鉴权接口的调用配置说明
  10. 聊天机器人应用趋势跟踪月报