【BZOJ2733】永无乡(线段树,启发式合并)
题意:支持合并,求块内K小数
对于 100%的数据 n≤100000,m≤n,q≤300000
思路:对于每一个块建立一棵动态开点的线段树,暴力(启发式?)合并后二分下就行了
merge用函数的方式写因为懒得讨论x,y其中一个为0的情况,反正是把节点y并到x上
为什么这么暴力都不T?大概是因为随机数据的块的大小太平均了吧
var t:array[..,..]of longint;
sum:array[..]of longint;
fa,a,root:array[..]of longint;
n,m,x,y,k,i,j,s,cnt,p,q:longint;
ch:string; function find(k:longint):longint;
begin
if fa[k]<>k then fa[k]:=find(fa[k]);
exit(fa[k]);
end; procedure pushup(x:longint);
var l,r:longint;
begin
l:=t[x,]; r:=t[x,];
sum[x]:=sum[l]+sum[r];
end; procedure update(l,r,x:longint;var p:longint);
var mid:longint;
begin
if p= then
begin
inc(cnt); p:=cnt;
end;
if l=r then
begin
inc(sum[p]); exit;
end;
mid:=(l+r)>>;
if x<=mid then update(l,mid,x,t[p,])
else update(mid+,r,x,t[p,]);
pushup(p);
end; function merge(x,y:longint):longint;
var mid:longint;
begin
if (x=)or(y=) then exit(x+y);
t[x,]:=merge(t[x,],t[y,]);
t[x,]:=merge(t[x,],t[y,]);
pushup(x);
exit(x);
end; function query(l,r,k,p:longint):longint;
var mid,tmp:longint;
begin
if sum[p]<k then exit(-);
if l=r then exit(a[l]);
tmp:= sum[t[p,]];
mid:=(l+r)>>;
if tmp>=k then exit(query(l,mid,k,t[p,]))
else exit(query(mid+,r,k-tmp,t[p,]));
end; begin
assign(input,'bzoj2733.in'); reset(input);
assign(output,'bzoj2733.out'); rewrite(output);
readln(n,m);
for i:= to n do
begin
read(x); a[x]:=i;
update(,n,x,root[i]);
end;
for i:= to n do fa[i]:=i;
for i:= to m do
begin
readln(x,y);
p:=find(x); q:=find(y);
if p<>q then
begin
fa[q]:=p;
merge(root[p],root[q]);
end;
end;
readln(m);
for i:= to m do
begin
readln(ch);
s:=; x:=; y:=; k:=length(ch);
for j:= to k do
begin
if ch[j]=' ' then begin inc(s); continue; end;
if s= then x:=x*+ord(ch[j])-ord('');
if s= then y:=y*+ord(ch[j])-ord('');
end;
case ch[] of
'Q':writeln(query(,n,y,root[find(x)]));
'B':
begin
p:=find(x); q:=find(y);
if p<>q then
begin
fa[q]:=p; root[p]:=merge(root[p],root[q]);
end;
end;
end;
end; close(input);
close(output);
end.
【BZOJ2733】永无乡(线段树,启发式合并)的更多相关文章
- Bzoj 2733: [HNOI2012]永无乡(线段树+启发式合并)
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己 ...
- BZOJ2733 永无乡【splay启发式合并】
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ2733 永无乡 【splay启发式合并】
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4190 Solved: 2226 [Submit][Sta ...
- BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...
- [BZOJ2733][HNOI2010]永无乡 解题报告 启发式合并,线段树合并
好久没更新博客了,前段时间一直都在考试,都没时间些,现在终于有点闲了(cai guai)... 写了一道题,[HNOI2012]永无乡,其实是一道板子题,我发现我写了好多板子题...还是太菜了... ...
- bzoj2733: [HNOI2012]永无乡 线段树合并
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...
- 【bzoj2733】[HNOI2012]永无乡 线段树合并
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- 【BZOJ2733】【HNOI2012】永无乡 - 线段树合并
题意: Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通 ...
- bzoj 2733 : [HNOI2012]永无乡 (线段树合并)
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- [HNOI2012]永无乡 线段树合并
[HNOI2012]永无乡 LG传送门 线段树合并练手题,写这篇博客只是为了给我的这篇文章找个板子题. 并查集维护连通性,对于不在同一个连通块内的合并操作每次直接合并两颗线段树,复杂度\(O(n \l ...
随机推荐
- Android一键锁屏APP
题记: 这个app完全是拾人牙慧,作为练手用的,其实没有什么原创的东西.当然,博客还是我自己写的,记录下来,对自己也算是一种成长吧. 转载请注明原文地址: http://www.cnblogs.com ...
- Hadoop 安装过程中出现的问题
1.hadoop-daemon.sh start namenode 启动失败 查看hadoop/logs 下面的日志 出现 2017-04-11 15:35:13,860 WARN org.apach ...
- Python3基础教程(十六)—— 迭代器、生成器、装饰器
在这个实验里我们学习迭代器.生成器.装饰器有关知识. 这几个概念是 Python 中不容易理解透彻的概念,务必把所有的实验代码都完整的输入并理解清楚其中每一行的意思. 迭代器 Python 迭代器(I ...
- Visual Studio中Radio Button组绑定变量方法(DDX_Radio方法)
需求描述:Visual Studio 创建的界面程序中又许多 Radio Button,希望这些所有的Radio Button统一绑定到一个变量上,这个变量一旦改变,Radio Button的选中状态 ...
- vmware linux虚拟机与本地物理机共享文件夹
cd /mnt/hgfs 使用Vmware安装了linux虚拟机后,开发时,为了方便文件的传输等,因此需要使用共享文件夹,减少工作量.共享文件夹需要用到vmware提供的vmware tools工具, ...
- SQL Sever中多列拼接成一列值为NULL
查询出数据 SELECT a.ID AS KYMain_ID , ',' + a.Leader + ',' AS KYMain_Leader , ), b.TaskLeader) FROM TB_KY ...
- jQuery闪烁提示,让新消息在网页标题显示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head& ...
- 【讲●解】KMP算法
KMP算法 我们小组负责讲这个... 术语与规定 为了待会方便,所以不得不做一些看起来很拖沓的术语,但这些规定能让我们更好地理解\(KMP\)甚至\(AC\)自动机. 字符串匹配形式化定义如下: 假设 ...
- ECSHOP二次开发文档【文件结构说明和数据库表分析】
最近公司又把之前的ecshop进行二次开发,之前看过一些ecshop的东西,但是都过了很久差不多都忘完了,现在得把之前的重新捡回来,特此搜到这些文档,接下来的开发工作中会方便不少. Ecshop文件结 ...
- linux破解root登录密码,并重置
重启系统后按'e'键,进入编辑模式,在'UTF -8'后空格输入'rd.break'后,按快捷键'Ctrl+X'进入新界面进行编辑,代码如下: switch_root:/# mount -o remo ...