Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1622  Solved: 679

Description

罗马皇帝很喜欢玩杀人游戏。 他的军队里面有n个人,每个人都是一个独立的团。最近举行了一次平面几何测试,每个人都得到了一个分数。 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻。他决定玩这样一个游戏。 它可以发两种命令: 1. Merger(i, j)。把i所在的团和j所在的团合并成一个团。如果i, j有一个人是死人,那么就忽略该命令。 2. Kill(i)。把i所在的团里面得分最低的人杀死。如果i这个人已经死了,这条命令就忽略。 皇帝希望他每发布一条kill命令,下面的将军就把被杀的人的分数报上来。(如果这条命令被忽略,那么就报0分)

Input

第一行一个整数n(1<=n<=1000000)。n表示士兵数,m表示总命令数。 第二行n个整数,其中第i个数表示编号为i的士兵的分数。(分数都是[0..10000]之间的整数) 第三行一个整数m(1<=m<=100000) 第3+i行描述第i条命令。命令为如下两种形式: 1. M i j 2. K i

Output

如果命令是Kill,对应的请输出被杀人的分数。(如果这个人不存在,就输出0)

Sample Input

5
100 90 66 99 10
7
M 1 5
K 1
K 1
M 2 3
M 3 4
K 5
K 4

Sample Output

10
100
0
66

HINT

部分数据如下 JudgeOnline/upload/201607/aa.rar

Source

左偏树(可并堆)模板题

第40行fa[x]=mge,是因为x所在并查集中可能有以x为father的点,如果不修改fa[x],会导致一部分点从集合中脱离出去。

 /*by SilverN*/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct node{
int l,r;
int w;
}t[mxn];
int dep[mxn];
int n,m;
bool kd[mxn];
int fa[mxn];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
int mge(int x,int y){
if(x*y==)return x+y;
if(t[x].w>t[y].w)swap(x,y);
t[x].r=mge(t[x].r,y);
if(dep[t[x].l]<dep[t[x].r])swap(t[x].l,t[x].r);
dep[x]=dep[t[x].r]+;
return x;
}
int kill(int x){
if(kd[x])return ;
x=find(x);
kd[x]=;
fa[x]=mge(t[x].l,t[x].r);
fa[fa[x]]=fa[x];//
return t[x].w;
}
int main(){
int i,j;
n=read();
for(i=;i<=n;i++){
t[i].w=read();
fa[i]=i;
}
dep[]=-;
m=read();
char op[];int x,y;
for(i=;i<=m;i++){
scanf("%s",op);
if(op[]=='M'){
x=read();y=read();
if(kd[x] || kd[y])continue;
x=find(x);y=find(y);
if(x!=y) fa[x]=fa[y]=mge(x,y);
}
else{
x=read();
printf("%d\n",kill(x));
}
}
return ;
}

最新文章

  1. RASPBERRY PI 外设学习资源
  2. Android 学习笔记之SurfaceView的使用+如何实现视频播放...
  3. Permutations [LeetCode]
  4. Data Pump(数据抽取)介绍
  5. 深入理解Java对象的序列化与反序列化的应用
  6. wtforms快速使用和源码分析(基于flask)
  7. rem 转 px
  8. eclipse--常见问题
  9. web端代码提示
  10. STM32 HAL库的使用心得
  11. db mysql / mysql cluster 5.7.19 / my.cnf / thread_pool_stall_limit
  12. 集成学习二: Boosting
  13. Django中HtttpRequest请求
  14. 2019.01.19 codeforces896C.Willem, Chtholly and Seniorious(ODT)
  15. [LeetCode] 701. Insert into a Binary Search Tree
  16. 获取assets文件内容,raw内容
  17. js之数码时钟加随机变色
  18. 任务调度Cron表达式及Quartz代码详解
  19. C++中临时对象的产生与优化
  20. selenium 下拉框处理

热门文章

  1. 通用权限管理系统组件3.9 的 Oracle 数据库创建脚本参考
  2. web—第三章XHTML
  3. rpc框架之 thrift 学习 1 - 安装 及 hello world
  4. lecture15-自动编码器、语义哈希、图像检索
  5. WPF 小技巧
  6. 我开源了一个ios应用,你们拿去随便玩
  7. Windows8.1画热度图 - 坑
  8. 清空KindEditor富文本编辑器里面的内容方法
  9. 1025关于explain的补充1
  10. .net 使用memcache做缓存