直接平衡树启发式合并就好了。。。貌似是个很高端的东西。。

貌似可以证明splay的启发式合并是均摊$O(nlogn)$的。。。而其他平衡树都不行,所以其他的复杂度都是$O(nlog^2n)的$的

所以就用平板电视里的splay好啦!2333

 /**************************************************************
Problem: 2733
User: rausen
Language: C++
Result: Accepted
Time:2148 ms
Memory:9756 kb
****************************************************************/ #include <cstdio>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> using namespace std;
using namespace __gnu_pbds;
typedef tree<int, int, less<int>, splay_tree_tag, tree_order_statistics_node_update> Tree;
typedef Tree :: iterator iter;
const int N = 1e5 + ; int read();
int get_op(); int n, m;
int a[N];
int fa[N], sz[N];
Tree T[N]; int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
} void _union(int x, int y) {
iter it;
x = find(x), y = find(y);
if (x == y) return;
if (sz[x] < sz[y]) swap(x, y);
for (it = T[y].begin(); it != T[y].end(); ++it)
T[x][it -> first] = it -> second;
fa[y] = x, sz[x] += sz[y], T[y].clear();
} int query() {
int x = find(read()), k = read();
if (k > T[x].size()) return -;
return T[find(x)].find_by_order(k - ) -> second;
} int main() {
int i, Q, oper;
n = read(), m = read();
for (i = ; i <= n; ++i) {
a[i] = read(), fa[i] = i;
T[i][a[i]] = i;
}
for (i = ; i <= m; ++i) _union(read(), read());
for (Q = read(); Q; --Q) {
oper = get_op();
if (oper == ) _union(read(), read());
else printf("%d\n", query());
}
return ;
} inline int read() {
static int x;
static char ch;
x = , ch = getchar();
while (ch < '' || '' < ch)
ch = getchar();
while ('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
return x;
} inline int get_op() {
static char ch;
ch = getchar();
while (ch != 'Q' && ch != 'B') ch = getchar();
return ch == 'Q';
}

BZOJ2733 [HNOI2012]永无乡的更多相关文章

  1. bzoj2733: [HNOI2012]永无乡 启发式合并

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2733 题目: 2733: [HNOI2012]永无乡 Time Limit: 10 Sec   ...

  2. bzoj2733: [HNOI2012]永无乡(splay)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3778  Solved: 2020 Description 永 ...

  3. [Bzoj2733][Hnoi2012] 永无乡(BST)(Pb_ds tree)

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

  4. [bzoj2733][HNOI2012]永无乡_权值线段树_线段树合并

    永无乡 bzoj-2733 HNOI-2012 题目大意:题目链接. 注释:略. 想法: 它的查询操作非常友善,就是一个联通块内的$k$小值. 故此我们可以考虑每个联通块建一棵权值线段树. 这样的话每 ...

  5. BZOJ2733 [HNOI2012]永无乡 【线段树合并】

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. [BZOJ2733] [HNOI2012] 永无乡 (splay启发式合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  7. BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并

    题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...

  8. bzoj2733: [HNOI2012]永无乡 线段树合并

    永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...

  9. BZOJ2733: [HNOI2012]永无乡(线段树合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

随机推荐

  1. JAVA经典算法40题(1-20)

    [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程序分析:   兔子的规律 ...

  2. Unity Tidy Tile Pack #1

    https://www.assetstore.unity3d.com/cn/#!/content/3276 版本: 1.1 下载地址 密码:mt8a

  3. 折纸问题java实现

    /** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...

  4. My roadway of compilers principles.

    龙书学习过程代码记录--Python3.5(毕竟第一遍看书,书里面的例子全用python写的) One 将中缀表达式翻译成后缀表达式↓ class Parser(object): def __init ...

  5. 自定义view imageviw

    新建一个类继承imageview package com.exaple.myselfview; import android.content.Context; import android.graph ...

  6. javascript百度地图添加一个普通标注点(2014-3-8 记)

    1.导入jquery.js文件:<script type="text/javascript" src="js/jquery.js"></scr ...

  7. App.xaml.cs

    using System.Windows; namespace HelloWorld { /// <summary> /// Interaction logic for App.xaml ...

  8. SelectMany等LINQ运算符的使用

    public class Racer : IComparable<Racer>, IFormattable { public string FirstName { get; set; } ...

  9. centos 基本操作(快捷键开户终端,复制,粘贴,yum命令)

    centos 开启终端默认时不禁止的,所以得手动开启(可自定义键盘)菜单:System->Preferences->Keyboard Shortcuts在Desktop分类下找到“Run ...

  10. 特征的SID表、M表、P表、Q表、X表、Y表、T表

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...