传送门

【题目分析】

线段树合并裸题了吧。。。。

将每个岛视作一棵权值线段树,然后直接按照题目意思去进行合并,由于只有查询第K大岛的询问,所以merge过程就直接递归到叶子节点,一直合并size即可。

第一次写线段树合并结果有一个地方写错调了半天,唉。。。

【代码~】

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;int n,m,q;
int a[MAXN];
int tot,fa[MAXN],id[MAXN];
int lc[MAXN*20],rc[MAXN*20],siz[MAXN*20],rt[MAXN*20];int Read(){int i=0,f=1;char c;for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar();for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';return i*f;
}int find(int x){if(x==fa[x])return x;return fa[x]=find(fa[x]);
}void update(int &root,int l,int r,int k){if(!root)root=++tot;siz[root]++;if(l==r)return ;int mid=l+r>>1;if(k<=mid)update(lc[root],l,mid,k);elseupdate(rc[root],mid+1,r,k);
}void merge(int &x,int y){if(!x||!y){x+=y;return ;}siz[x]+=siz[y];merge(lc[x],lc[y]);merge(rc[x],rc[y]);
}void build(){for(int i=1;i<=n;++i){fa[i]=i;a[i]=Read();id[a[i]]=i;update(rt[i],1,n,a[i]);}for(int i=1;i<=m;++i){int x=Read(),y=Read();int fx=find(x),fy=find(y);if(fx!=fy){if(siz[rt[fx]]>siz[rt[fy]])fa[fx]=fy,merge(rt[fy],rt[fx]);elsefa[fy]=fx,merge(rt[fx],rt[fy]);}}
}int query(int root,int l,int r,int k){if(l==r)return l;int x=siz[lc[root]];int mid=l+r>>1;if(k<=x)return query(lc[root],l,mid,k);elsereturn query(rc[root],mid+1,r,k-x);
}int main(){n=Read(),m=Read();build();q=Read();while(q--){char cz[10];scanf("%s",cz);int x=Read(),y=Read();if(cz[0]=='B'){int fx=find(x),fy=find(y);if(fx!=fy){if(siz[rt[fx]]>siz[rt[fy]])fa[fx]=fy,merge(rt[fy],rt[fx]);elsefa[fy]=fx,merge(rt[fx],rt[fy]);}}else{x=find(x);if(siz[rt[x]]<y)puts("-1");elsecout<<id[query(rt[x],1,n,y)]<<'\n';}}return 0;
}

转载于:https://www.cnblogs.com/Ishtar/p/10291853.html

洛谷3224 【HAOI2012】永无乡(线段树合并)相关推荐

  1. BZOJ 2733 | 洛谷 P3224 [HNOI2012]永无乡

    https://www.lydsy.com/JudgeOnline/problem.php?id=2733 https://www.luogu.org/problemnew/show/P3224 C+ ...

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

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

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

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

  4. bzoj2733 永无乡 splay树的启发式合并

    https://vjudge.net/problem/HYSBZ-2733 给一些带权点,有些点是互相连通的, 然后给出2种操作,在两点间加一条边,或者询问一个点所在的连通块内的第k小值的编号 并查集 ...

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

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

  6. 洛谷 - P1886 滑动窗口(单调队列/线段树)

    题目链接:点击查看 题目大意:给出一个由n个数构成的序列,再给出一个长度为k的窗口,这个窗口从第一个下标开始一直向后移动,每次移动一个单位,每次移动询问一次该窗口中的最大值和最小值,最后输出答案 题目 ...

  7. 【题解】洛谷P4145 花神游历各国(线段树)

    洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...

  8. 洛谷P3960 列队(动态开节点线段树)

    题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...

  9. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  10. 洛谷 P4246 [SHOI2008]堵塞的交通 线段树

    题目描述 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个222行 C'>CCC列的矩形网格,网格上的每个点代表一个城市,相邻的城市 ...

最新文章

  1. Bootstrap 模态框上下居中
  2. 内容流推荐中的个性化标题生成框架
  3. 数据结构与算法之归并排序
  4. 问题 A: 【动态规划】采药_二维数组_一维数组
  5. Makefile 函数
  6. 学习笔记--数据结构与算法基础(青岛大学-王卓)--第八章排序
  7. java lbp_OpenCV中基于LBP算法的人脸检测测试代码
  8. 迅雷上传速度怎么限制的方法
  9. Java 拾遗补阙 ----- 运算符
  10. 计算机ram rom,ROM和RAM区别是什么?
  11. 怎么提升个人的代码编写能力
  12. Java基础知识每日总结(19)---Java输入输出流、文件、递归
  13. java中集合的基础知识_javaSE基础知识之集合类
  14. 蚂蚁金服前端第一次电面(校招)笔记整理
  15. 可口可乐市场调查失败的原因_案例:新可口可乐,市场调研,失误在哪里? -...
  16. R包vegan的冗余分析(RDA)
  17. 【Dos】Dos常用命令
  18. UART 相关的概念
  19. few-shot基本概念
  20. 【miscellaneous】华为智能视频监控系统设计解决方案

热门文章

  1. java和opencv配置_Java——OpenCVWindows配置和项目中jar包的简单配置
  2. aspose 换行写_aspose.word 换行符 aspose.words换行符
  3. 计算方位角_全站仪各方面应用的原理、操作及计算,看这篇就对了!
  4. java正则匹配英文句号_「正则表达式」王国奇遇记
  5. python规则框架_Pytest框架【2】:用例规则
  6. django_form表单的提交
  7. JavaScript 模块化七日谈
  8. Oracle 重复数据查询以及删除
  9. 图像浏览界面缩放和平移操作的实现
  10. Java学习小程序(2)输出三个数中的最大值