思路:

高一神犇 竟然 问我这道题   我光荣地  看着题解(划掉)  写了一下午 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. linux设置crontab定时执行脚本备份mysql

    前言:mysqldump备份数据库命令 mysqldump -u root -psztx@2018 fengliuxiaosan > /dbbackup/fengliuxiaosan.sql## ...

  2. 8 switch case

    当一个case成立,从这个case向后穿透所有case,即使后面的case条件不成立 包括default,直到程序结束或者遇到break程序才结束. 1.case是常量,且不能重复 2.表达式可以是b ...

  3. Linux常用命令(简单的常用)

      1. 文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd ...

  4. JS数组reduce()方法

    1.语法 arr.reduce(callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上 ...

  5. CentOS6.8 安装python2.7,pip以及yum

    由于CentOS6.8里自带的yum所依赖的python是2.6.66版本,但是安装pip至少要求python是2.7版本,因而原有的2.6并不能卸载,又得安装新的2.7.之前安装的时候强制卸载了2. ...

  6. 从零开始的 webpack4 + vue2.x

    新建文件夹 webpack-vue 安装依赖 yarn init //初始化package.json yarn add webpack webpack-cli //添加webpack.webpack- ...

  7. GeoTrust 企业(OV)型 增强版(EV) SSL证书

      GeoTrust 企业(OV)型 增强版(EV) SSL证书(GeoTrust True BusinessID with EV SSL Certificates),验证域名所有权,更严格的验证企业 ...

  8. ansible ad-hoc 参考

    # 检查主机连接 # ansible test -m ping # 执行远程命令 # ansible test -m command -a 'uptime' # 执行主控端脚本 # ansible t ...

  9. (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...

  10. git 拉取远程分支 --本地分支不存在

    git checkout -b 本地分支名 origin/远程分支名