【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 ...
随机推荐
- LeetCode 69 题
1.题目要求 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出 ...
- 伟景行 citymaker 从入门到精通(1)——js开发,最基本demo,加载cep工程文件
开发环境:citymaker 7(以下简称cm),jquery,easyui 1.4(界面),visual studio 2012(没有vs,不部署到IIS也行,html文件在本地目录双击打开可用) ...
- Python Linked List
上周日教导一个科班非技术的朋友学习 Python 编程.他的 Python 水平大概就是看了几篇短的 Python 介绍博客.会流程控制和全局函数编写. 具体教导思路是从自己实现一个链表出发,研究学习 ...
- 关于mybatis的一些用法
resultMap 的用法 <resultMap id="唯一标识" type="映射的pojo类"> <id column = " ...
- react中的jsx详细理解
这是官网上的一个简单的例子 const name = 'Josh Perez'; const element = <h1>Hello, {name}</h1>; ReactDO ...
- 暑假集训 || LCA && RMQ
LCA定义为对于一颗树 树上两个点的最近公共祖先 一.Tarjan求LCA(离线方法 https://blog.csdn.net/lw277232240/article/details/7701751 ...
- 连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
MySQL新版默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password.当连接MySQL时报错“plugin caching_sha2 ...
- In line copy and paste to system clipboard
On the Wiki Wiki Activity Random page Videos Photos Chat Community portal To do Contribute Watch ...
- vue计算属性computed和methods的区别
computed和methods的区别 在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue. com ...
- memcached 经典问题或现象
缓存雪崩现象及真实案例 缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降, 缓存中缺失的数据 去数据库查询.短时间内,造成数据库服务器崩溃. 重启 DB,短期又被压跨,但缓存数据也多一些 ...