bzoj上数组开大会T……

本来想用set瞎搞的,想了想发现不行

总之就是并查集,每个点开一个动态开点的权值线段树,然后合并的时候把值并在根上,询问的时候找出在根的线段树里找出k小值,看看这个值属于哪个岛即可

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int n,m,q,f[N],rt[N],tot,rl[N];
char c[5];
struct qwe
{
int ls,rs,s;
}t[10000005];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int zhao(int x)
{
return f[x]==x?x:f[x]=zhao(f[x]);
}
void ud(int ro)
{
t[ro].s=t[t[ro].ls].s+t[t[ro].rs].s;
}
void update(int &ro,int l,int r,int p)
{
if(!ro)
ro=++tot;
if(l==r)
{
t[ro].s=1;
return;
}
int mid=(l+r)>>1;
if(p<=mid)
update(t[ro].ls,l,mid,p);
else
update(t[ro].rs,mid+1,r,p);
ud(ro);
}
void hb(int &ro,int la,int l,int r)
{
if(!la)
return;
if(!ro)
{
ro=la;
return;
}
if(l==r)
{
t[ro].s+=t[la].s;
return ;
}
int mid=(l+r)>>1;
hb(t[ro].ls,t[la].ls,l,mid);
hb(t[ro].rs,t[la].rs,mid+1,r);
ud(ro);
}
int ques(int ro,int l,int r,int k)
{
if(l==r)
return l;
int mid=(l+r)>>1;
if(t[ro].ls&&t[t[ro].ls].s>=k)
return ques(t[ro].ls,l,mid,k);
else
return ques(t[ro].rs,mid+1,r,k-t[t[ro].ls].s);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
f[i]=i;
int x=read();
rl[x]=i;
update(rt[i],1,n,x);
}
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),fx=zhao(x),fy=zhao(y);
if(fx!=fy)
{
f[fy]=fx;
hb(rt[fx],rt[fy],1,n);
}
}
q=read();
while(q--)
{
scanf("%s",c);
int x=read(),y=read();
if(c[0]=='B')
{
int fx=zhao(x),fy=zhao(y);
if(fx!=fy)
{
f[fy]=fx;
hb(rt[fx],rt[fy],1,n);
}
}
else
{
int fx=zhao(x);
if(t[rt[fx]].s<y)
puts("-1");
else
printf("%d\n",rl[ques(rt[fx],1,n,y)]);
}
}
return 0;
}

bzoj 2733: [HNOI2012]永无乡【并查集+权值线段树】的更多相关文章

  1. 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并

    题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉人的奶浆味: ...

  2. BZOJ 2733: [HNOI2012]永无乡(treap + 启发式合并 + 并查集)

    不难...treap + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...

  3. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap

    2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

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

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

  5. bzoj 2733: [HNOI2012]永无乡 -- 线段树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...

  6. bzoj 2733: [HNOI2012]永无乡 离线+主席树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1167  Solved: 607[Submit][Status ...

  7. Bzoj 2733: [HNOI2012]永无乡 数组Splay+启发式合并

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3955  Solved: 2112[Submit][Statu ...

  8. Bzoj 2733: [HNOI2012]永无乡(线段树+启发式合并)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己 ...

  9. 线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡

    题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostr ...

随机推荐

  1. python学习之 - XML

    xml模块定义:实现不同语言或程序之间进行数据交换的协议.格式如下:通过<>节点来区别数据结构如:<load-on-startup(这个是标签) test="value&q ...

  2. loj6165 一道水题(线性筛)

    题目: https://loj.ac/problem/6165 分析: 最直接的想法就是把1~n的所有数分解质因数,然后每个素数的幂取max 我们首先来看看一共可能有哪些素数? 实际上这些素因数恰好就 ...

  3. Codechef-CHEFPRAD(找事件点+贪心)

    题意: 定义一个函数maxMatching(A,B,y),其输入包含两个整数数组 A 和 B 以及一个整数 y,返回一个整数. 记数组 A 的大小为 N,数组 B 的大小为 M.考虑一个由 {a1, ...

  4. java代码编译过程

    简单随笔 java程序需要先编译成class文件然后才能执行,由于是编程成立机器代码,虚拟机加载内存的时候更快的执行. java文件编译成class文件步骤如下: 1)词法分析,检查每一个关键字单词是 ...

  5. java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。

    import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; //请在小于99999的正整数中找符合下列条件的 ...

  6. 地球Gauss_Kruger中央0度经线图

  7. jmeter的jmx脚本结构解析

    jmeter的jmx脚本是xml文档,简单分析下其结构 xml是树形结构:jmeter界面的树形结构就是xml的结构 一级目录: 二级目录:在一级目录右键后可以看到的,都可以做为二级目录 三级目录.n ...

  8. Android自带的分享功能案例

    MainActivity的代码 package com.hpsvse.weiboshare; import java.io.File; import android.net.Uri; import a ...

  9. [IT学习]跟阿铭学linux(第3版)

    1.安装Linux在虚拟化平台上 Windows Vmware Workstation,需要在本机上打开CPU对虚拟化的支持.Virtualization Cent OS7 已成功安装. 2.http ...

  10. 网页中打开exe

    网页上打开本地的exe文件,可以吗? 西蒙说:可以的. 方法如下: 1.定义一个私有协议,指向本地的那个exe 2.在网页上将此私有协议作为URL,点击之即可打开那个exe 3.URL中还可以包含参数 ...