2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)
传送门
给出n个带点权的点,支持连边和查询连通块第k大。
这个貌似就是一道线段树合并的裸板啊。。。
代码:
#include<bits/stdc++.h>
#define N 100005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n,m,q,a[N],fa[N*60],siz[N*60],rt[N*60],son[N*60][2],tot=0,mp[N];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
inline void update(int&p,int l,int r,int k){
if(!p)p=++tot;
++siz[p];
if(l==r)return;
int mid=l+r>>1;
if(k<=mid)update(son[p][0],l,mid,k);
else update(son[p][1],mid+1,r,k);
}
inline void merge(int&x,int y){
if(!x||!y){x+=y;return;}
siz[x]+=siz[y];
merge(son[x][0],son[y][0]);
merge(son[x][1],son[y][1]);
}
inline int query(int p,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>1;
int tmp=siz[son[p][0]];
if(tmp>=k)return query(son[p][0],l,mid,k);
return query(son[p][1],mid+1,r,k-tmp);
}
int main(){
n=read(),m=read();
for(int i=1;i<=n;++i)a[i]=read(),fa[i]=i,mp[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)fa[fx]=fy,merge(rt[fy],rt[fx]);
}
q=read();
while(q--){
char op[2];
int x,y;
scanf("%s%d%d",op,&x,&y);
if(op[0]=='B'){
int fx=find(x),fy=find(y);
if(fx!=fy){
fa[fx]=fy;
merge(rt[fy],rt[fx]);
}
}
else{
int fx=find(x);
printf("%d\n",siz[rt[fx]]<y?-1:mp[query(rt[fx],1,n,y)]);
}
}
return 0;
}
2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)的更多相关文章
- 洛谷P3224 [HNOI2012]永无乡(线段树合并+并查集)
题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...
- 洛谷 P3224 [HNOI2012]永无乡 解题报告
P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...
- [HNOI2012]永无乡 线段树合并
[HNOI2012]永无乡 LG传送门 线段树合并练手题,写这篇博客只是为了给我的这篇文章找个板子题. 并查集维护连通性,对于不在同一个连通块内的合并操作每次直接合并两颗线段树,复杂度\(O(n \l ...
- 洛谷 P3224 [HNOI2012]永无乡
题面 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 \(1\) 到 \(n\) 来表示.某些岛 ...
- bzoj 2733 : [HNOI2012]永无乡 (线段树合并)
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...
- bzoj2733: [HNOI2012]永无乡 线段树合并
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...
- 【bzoj2733】[HNOI2012]永无乡 线段树合并
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- [洛谷P3224][HNOI2012]永无乡
题目大意:给你$n$个点,每个点有权值$k$,现有两种操作: 1. $B\;x\;y:$将$x,y$所在联通块合并2. $Q\;x\;k:$查询第$x$个点所在联通块权值第$k$小是哪个数 题解:线段 ...
随机推荐
- FMX TListView 搜索 Search
FMX,FireMonkey,平台框架下TListView控件搜索.过滤. 查找功能确实强大!! 设置SearchVisibe属性为true,就自动显示搜索框,输入文字,就开始检索了,不用写一行代码! ...
- mysql find_in_set排序
假若有给定id数组(1,9,3,5,6);查询sql语句需要安装这个顺序排序 select * from tb where id in (1,9,3,5,6) order by find_in_set ...
- 前端-CSS-5-继承性&层叠性&权重比较
1.继承性 <style type="text/css"> .father{ font-size: 30px; background-color: green; } . ...
- ABAP-消息发布
FUNCTION ZSDI0009_DO_INFOMESSAGE. *"----------------------------------------------------------- ...
- ncodeURIComponent() 函数 vue内容
ncodeURIComponent() 函数 编辑 encodeURIComponent() 函数[1] 作用:可把字符串作为URI 组件进行编码.其返回值URIstring 的副本,其中的某些字符 ...
- OpenCv 人脸识别 基础
#include <opencv2\opencv.hpp> #include <iostream> using namespace std; int main() { // 摄 ...
- hibernate最佳实践
1.数据量巨大,性能要求高,hibernate由于在ORM映射中对系统资源消耗也比较高,所以不适合 2.hibernate适合:逻辑复杂,数据量不大. 3.sessionFactory的创建非常消耗资 ...
- 【Java】JVM(二)、Java垃圾收集算法
一.标记-清除算法 算法主要分为两个步骤 1. 标记: 遍历所有的 GC Roots, 然后标记所有可达对象为存活对象 2. 清除: 遍历堆中所有对象,然后将没有标记的对象清除. 存在不足: 1. 效 ...
- Hbase—学习笔记(一)
此文的目的: 1.重点理解Hbase的整体工作机制 2.熟悉编程api,能够用来写程序 1. 什么是HBASE 1.1. 概念特性 HBASE是一个数据库----可以提供数据的实时随机读写 HB ...
- Zabbix安装(server和agent)及基本配置
简介 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制 ...