思路:

高一神犇 竟然 问我这道题   我光荣地  看着题解(划掉)  写了一下午 QaQ

multiset不能erase(一个值)   这样就把等于这个值 的数都erase掉了  (woc我一开始不知道啊啊啊 )

注意细节...

//By SiriusRen
#include <set>
#include <cstdio>
using namespace std;
const int N=;
int n,q,all,xx,yy;
char op[];
struct Tree{int w,l,r,fa,dis,lazy;}tr[N];
int find(int x){while(tr[x].fa)x=tr[x].fa;return x;}
void push_down(int x){
if(tr[x].l)tr[tr[x].l].w+=tr[x].lazy,tr[tr[x].l].lazy+=tr[x].lazy;
if(tr[x].r)tr[tr[x].r].w+=tr[x].lazy,tr[tr[x].r].lazy+=tr[x].lazy;
tr[x].lazy=;
}
int merge(int x,int y){
if(x*y==)return x+y;
if(tr[x].w<tr[y].w)swap(x,y);
push_down(x);
tr[x].r=merge(tr[x].r,y);
tr[tr[x].r].fa=x;
if(tr[tr[x].l].dis<tr[tr[x].r].dis)swap(tr[x].l,tr[x].r);
tr[x].dis=tr[tr[x].r].dis+;
return x;
}
int del(int x){
int F=tr[x].fa,t;
push_down(x);tr[t=merge(tr[x].l,tr[x].r)].fa=F;
tr[x].l=tr[x].r=tr[x].fa=tr[x].dis=;
if(tr[F].l==x)tr[F].l=t;
else tr[F].r=t;
while(tr[t].fa)t=tr[t].fa;
return find(t);
}
void dfs(int x){
if(tr[x].fa)dfs(tr[x].fa);
push_down(x);
}
multiset<int>s;multiset<int>::iterator it;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&tr[i].w),s.insert(tr[i].w);
scanf("%d",&q);
for(int I=;I<=q;I++){
scanf("%s",op);
if(op[]=='A'){
if(op[]==''){
scanf("%d%d",&xx,&yy);
dfs(xx);
s.erase(s.find(tr[find(xx)].w));
tr[xx].w+=yy;
s.insert(tr[merge(del(xx),xx)].w);
}
else if(op[]==''){
scanf("%d%d",&xx,&yy);
int fx=find(xx);
s.erase(s.find(tr[fx].w));
tr[fx].w+=yy,tr[fx].lazy+=yy;
s.insert(tr[fx].w);
}
else if(op[]=='')scanf("%d",&xx),all+=xx;
}
else if(op[]=='F'){
if(op[]==''){
scanf("%d",&xx);dfs(xx);
printf("%d\n",tr[xx].w+all);
}
else if(op[]==''){
scanf("%d",&xx);
printf("%d\n",tr[find(xx)].w+all);
}
else if(op[]==''){
it=s.end();it--;
printf("%d\n",(*it)+all);
}
}
else{
scanf("%d%d",&xx,&yy);
int fx=find(xx),fy=find(yy);
if(fx!=fy){
if(merge(fx,fy)==fy)s.erase(s.find(tr[fx].w));
else s.erase(s.find(tr[fy].w));
}
}
}
}

BZOJ 2333 左偏树 (写得我人生都崩溃了...)的更多相关文章

  1. bzoj 2809 左偏树\平衡树启发式合并

    首先我们对于一颗树,要选取最多的节点使得代价和不超过m,那么我们可以对于每一个节点维护一个平衡树,平衡树维护代价以及代价的和,那么我们可以在logn的时间内求出这个子树最多选取的节点数,然后对于一个节 ...

  2. BZOJ 4003 左偏树

    思路: 用到了左偏树合并复杂度是logn的性质 一开始先BFS一遍 打标记的左偏树 //By SiriusRen #include <cstdio> #include <cstrin ...

  3. 题解 P3377 【【模板】左偏树(可并堆)】

    所谓的左偏树,是一种可并堆的实现. 这种数据结构能够支持高效的堆合并,但是不支持查询节点等操作,因此不同于平衡树,它的结构是不平衡的. 左偏树满足如下两条基本性质: 1. 堆的性质 这也就是说左偏树每 ...

  4. 【BZOJ 2333 】[SCOI2011]棘手的操作(离线+线段树|可并堆-左偏树)

    2333: [SCOI2011]棘手的操作 Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边 ...

  5. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  6. 【BZOJ 2809】2809: [Apio2012]dispatching (左偏树)

    2809: [Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Maste ...

  7. bzoj 4585: [Apio2016]烟火表演【左偏树】

    参考:https://blog.csdn.net/wxh010910/article/details/55806735 以下课件,可并堆部分写的左偏树 #include<iostream> ...

  8. BZOJ 5494: [2019省队联测]春节十二响 (左偏树 可并堆)

    题意 略 分析 稍微yy一下可以感觉就是一个不同子树合并堆,然后考场上写了一发左偏树,以为100分美滋滋.然而发现自己傻逼了,两个堆一一对应合并后剩下的一坨直接一次合并进去就行了.然鹅我这个sb把所有 ...

  9. BZOJ 1455 罗马游戏 ——左偏树

    [题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...

随机推荐

  1. 北京Python开发培训怎么选?

    北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量Python岗位正在等待大家淘金. 近几年中,Python一直是市场上最受欢迎 ...

  2. Array.prototype.slice.call()的理解

    最近在看廖雪峰的JS课程,浏览器中的操作DOM的那一章,有这样一道题. JavaScript Swift HTML ANSI C CSS DirectX <!-- HTML结构 --> & ...

  3. 原型链、构造函数、箭头函数、se6数组去重

    原型链 例子如下: var arr = [1, 2, 3]; 其原型链为:arr ----> Array.prototype ----> Object.prototype ----> ...

  4. Python基础-while奇数和

    利用while循环计算100*座位号 以内奇数的和. n = 1 s = 0 SeatID=1 while n <= 100*SeatID: s += n n += 2 print '奇数的和: ...

  5. BZOJ 1602 牧场行走

    直接写一波Lca就好了 #include<cstdio> #include<cmath> #include<algorithm> using namespace s ...

  6. WPF Style设置和模板化Template

    WPF样式设置和模板化是一套功能(样式,模板,触发器和演示图版),可以为产品设置统一外观.类似于html的css,可以快速的设置一系列属性值到控件. 案例:ButtonStyle 这里创建了一个目标类 ...

  7. 解决Eclipse导入项目后Validating验证缓慢的问题

    减少不必要的验证即可 步骤:Window-Preferences-左侧的Validation 如图所示,将Build一列的勾全部去掉就好了. 如需手动校验,右键项目名-选择Validate即可.

  8. kafka监控工具kafka-manager

    1.几个kafka监控工具 Kafka Web Console:监控功能较为全面,可以预览消息,监控Offset.Lag等信息,但存在bug,不建议在生产环境中使用. Kafka Manager:偏向 ...

  9. (39.1) Spring Boot Shiro权限管理【从零开始学Spring Boot】

    (本节提供源代码,在最下面可以下载)距上一个章节过了二个星期了,最近时间也是比较紧,一直没有时间可以写博客,今天难得有点时间,就说说Spring Boot如何集成Shiro吧.这个章节会比较复杂,牵涉 ...

  10. fzu 2124

    #include<stdio.h> #include<queue> #include<math.h> #include<algorithm> #incl ...