洛谷3224 【HAOI2012】永无乡(线段树合并)
传送门
【题目分析】
线段树合并裸题了吧。。。。
将每个岛视作一棵权值线段树,然后直接按照题目意思去进行合并,由于只有查询第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】永无乡(线段树合并)相关推荐
- BZOJ 2733 | 洛谷 P3224 [HNOI2012]永无乡
https://www.lydsy.com/JudgeOnline/problem.php?id=2733 https://www.luogu.org/problemnew/show/P3224 C+ ...
- BZOJ 2733: [HNOI2012]永无乡 [splay启发式合并]
2733: [HNOI2012]永无乡 题意:加边,询问一个连通块中k小值 终于写了一下splay启发式合并 本题直接splay上一个节点对应图上一个点就可以了 并查集维护连通性 合并的时候,把siz ...
- [BZOJ2733] [HNOI2012] 永无乡 (splay启发式合并)
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- bzoj2733 永无乡 splay树的启发式合并
https://vjudge.net/problem/HYSBZ-2733 给一些带权点,有些点是互相连通的, 然后给出2种操作,在两点间加一条边,或者询问一个点所在的连通块内的第k小值的编号 并查集 ...
- BZOJ[2733][HNOI2012]永无乡 Splay启发式合并
题目链接 题目大意及线段树合并解法在这里 每合并两个点,将它俩启发式合并 启发式合并,即把小的暴力往大的那里插 说按前序遍历插复杂度会极其优越?? 第k大是平衡树基本操作 代码如下: #include ...
- 洛谷 - P1886 滑动窗口(单调队列/线段树)
题目链接:点击查看 题目大意:给出一个由n个数构成的序列,再给出一个长度为k的窗口,这个窗口从第一个下标开始一直向后移动,每次移动一个单位,每次移动询问一次该窗口中的最大值和最小值,最后输出答案 题目 ...
- 【题解】洛谷P4145 花神游历各国(线段树)
洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...
- 洛谷P3960 列队(动态开节点线段树)
题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...
- LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...
- 洛谷 P4246 [SHOI2008]堵塞的交通 线段树
题目描述 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个222行 C'>CCC列的矩形网格,网格上的每个点代表一个城市,相邻的城市 ...
最新文章
- Bootstrap 模态框上下居中
- 内容流推荐中的个性化标题生成框架
- 数据结构与算法之归并排序
- 问题 A: 【动态规划】采药_二维数组_一维数组
- Makefile 函数
- 学习笔记--数据结构与算法基础(青岛大学-王卓)--第八章排序
- java lbp_OpenCV中基于LBP算法的人脸检测测试代码
- 迅雷上传速度怎么限制的方法
- Java 拾遗补阙 ----- 运算符
- 计算机ram rom,ROM和RAM区别是什么?
- 怎么提升个人的代码编写能力
- Java基础知识每日总结(19)---Java输入输出流、文件、递归
- java中集合的基础知识_javaSE基础知识之集合类
- 蚂蚁金服前端第一次电面(校招)笔记整理
- 可口可乐市场调查失败的原因_案例:新可口可乐,市场调研,失误在哪里? -...
- R包vegan的冗余分析(RDA)
- 【Dos】Dos常用命令
- UART 相关的概念
- few-shot基本概念
- 【miscellaneous】华为智能视频监控系统设计解决方案
热门文章
- java和opencv配置_Java——OpenCVWindows配置和项目中jar包的简单配置
- aspose 换行写_aspose.word 换行符 aspose.words换行符
- 计算方位角_全站仪各方面应用的原理、操作及计算,看这篇就对了!
- java正则匹配英文句号_「正则表达式」王国奇遇记
- python规则框架_Pytest框架【2】:用例规则
- django_form表单的提交
- JavaScript 模块化七日谈
- Oracle 重复数据查询以及删除
- 图像浏览界面缩放和平移操作的实现
- Java学习小程序(2)输出三个数中的最大值