左偏树【待施工】
2022/7/23 23:28:25
本文主要是介绍左偏树【待施工】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int fa[N],ls[N],rs[N],dist[N],val[N],id[N]; bool del[N]; int n,m,cnt; int get(int x) { if(x == fa[x])return x; return fa[x] = get(fa[x]); } struct leftist { int id,val; bool operator<(leftist x)const{return val == x.val?id<x.id:val < x.val;} }t[N]; int mer(int x,int y) { if(!x||!y)return x|y; if(t[y]<t[x])swap(x,y); rs[x] = mer(rs[x],y); if(dist[ls[x]] < dist[rs[x]])swap(ls[x],rs[x]); dist[x] = dist[rs[x]] + 1; return x; } int main() { cin >> n >> m; dist[0] = -1; for(int i = 1 ; i <= n ; i ++ ) { scanf("%d",&t[i].val); fa[i] = i; t[i].id = i; } for(int i = 1 ; i <= m ; i ++ ) { int x,y,op; scanf("%d%d",&op,&x); if(op == 1) { scanf("%d",&y); if(del[x]||del[y])continue; x = get(x),y = get(y); if(x != y)fa[x] = fa[y] = mer(x,y); } else { if(del[x]){puts("-1");continue;} x = get(x); printf("%d\n",t[x].val); del[x] = 1; fa[ls[x]] = fa[rs[x]] = fa[x] = mer(ls[x],rs[x]); ls[x] = rs[x] = dist[x] = 0; } } }
这篇关于左偏树【待施工】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04敏捷管理与看板工具:提升研发、设计、电商团队工作效率的利器
- 2025-01-04智慧养老管理工具如何重塑养老生态?
- 2025-01-04如何打造高绩效销售团队:工具与管理方法的结合
- 2025-01-04解决电商团队协作难题,在线文档工具助力高效沟通
- 2025-01-04春节超市管理工具:解锁高效运营与顾客满意度的双重密码
- 2025-01-046种主流销售预测模型:如何根据场景选用最佳方案
- 2025-01-04外贸服务透明化:增强客户信任与合作的最佳实践
- 2025-01-04重新定义电商团队协作:在线文档工具的战略作用
- 2025-01-04Easysearch Java SDK 2.0.x 使用指南(三)
- 2025-01-04百万架构师第八课:设计模式:设计模式容易混淆的几个对比|JavaGuide