P3377 【模板】左偏树(可并堆)

如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:

操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作)

操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,则输出-1并无视删除操作)

code:

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio> using namespace std; const int wx=200017; inline int read(){
int sum=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
return sum*f;
} int n,m;
int val[wx],f[wx],dis[wx];
int ch[wx][3]; int merge(int x,int y){
if(x==0||y==0) return x+y;
if((val[x]>val[y])||(val[x]==val[y]&&x>y))swap(x,y);
ch[x][1]=merge(ch[x][1],y); f[ch[x][1]]=x;
if(dis[ch[x][1]]>dis[ch[x][0]])swap(ch[x][1],ch[x][0]);
dis[x]=dis[ch[x][1]]+1; return x;
} int getf(int x){
while(f[x])x=f[x];
return x;
} void pop(int x){
val[x]=-1;
f[ch[x][1]]=f[ch[x][0]]=0;
merge(ch[x][0],ch[x][1]);
} int main(){
n=read(); m=read();
for(int i=1;i<=n;i++) val[i]=read();
for(int i=1;i<=m;i++){
int opt; opt=read();
if(opt==1){
int x,y; x=read(); y=read();
if(x==y||val[x]==-1||val[y]==-1)continue;
int fx=getf(x); int fy=getf(y);
merge(fx,fy);
}
else{
int x; x=read();
if(val[x]==-1)puts("-1");
else{
int fx=getf(x);
printf("%d\n",val[fx]); pop(fx);
}
}
}
}

最新文章

  1. stanford-parser使用说明
  2. 在SQL中使用CLR提供基本函数对二进制数据进行解析与构造
  3. Java产生随机数
  4. html、css杂记
  5. Android5.0新特性——Material Design简介
  6. Java系列:Add Microsoft SQL JDBC driver to Maven
  7. 使用Xcode插件,让iOS开发更加便捷
  8. BZOJ2393: Cirno的完美算数教室
  9. python------unicode字符串转换为其他类型
  10. Http学习之使用HttpURLConnection发送post和get请求(1)
  11. 201521123114 《Java程序设计》第14周学习总结
  12. model 字段参数 choice
  13. 6.7 使用show profile 进行sql分析
  14. mysqldump 和mysqlbinlog
  15. msm audio machine 代码跟踪
  16. python 连接操作mysql数据库
  17. tomcat报错相关问题
  18. Unity扩展编辑器五
  19. Kali-linux分析密码
  20. Xamarin XAML语言教程Xamarin.Forms中活动指示器的显示隐藏

热门文章

  1. 2016.1.23 通过cmd在程序中执行sql脚本
  2. 注解:@interface 自定义注解的语法
  3. Python 标准库 -&gt; Pprint 模块 -&gt; 用于打印 Python 数据结构
  4. Android中的文件读写总结
  5. 关于c#数据类型,类型转换,变量,常量,转义符。。。
  6. matlab rand(3,5)
  7. iOS 聊天界面
  8. NCBI下载SRA数据
  9. 删除GHOST中win7桌面IE删不掉的解决办法
  10. spring项目中监听器作用-ContextLoaderListener