思路:

高一神犇 竟然 问我这道题   我光荣地  看着题解(划掉)  写了一下午 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. Requests库 更新中

    1.获取网页内容 --- requests库 <需理解HTTP协议> >requests库的7个主要方法   方法 说明 requests.requests() 构造一个请求,支撑一 ...

  2. vue 打印 页面特定部分转pdf

    https://www.jb51.net/article/147040.htm https://www.jianshu.com/p/dd120b65446a  //转pdf

  3. vue中的父组件及子组件生命周期的执行顺序

    一.没有任何任何显示与隐藏限制条件的情况下: 1.运行的顺序依次是: 父组件created→父组件beforeMounted→子组件created→子组件beforeMounted→子组件mounte ...

  4. img标签和background-image的区别和具体使用时机

    最近在使用图片过程中,纠结到底使用img标签还是使用background-image属性,翻阅资料和百度后作出下列理解. 简单来说img是内容部分的东西,background-image是修饰性的东西 ...

  5. 原来PHP对象比数组用更少的内存

    一直以为php的数组更节省内存,从来没有测试过,今天因为要读取一个大配置文件作为pool.做了一次测试: 得出结论是 使用对象保存数据更好,花费的内存是数组array的1/4. 测试代码 class ...

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

    (本节提供源代码,在最下面可以下载) (4). 集成Shiro 进行用户授权 在看此小节前,您可能需要先看: http://412887952-qq-com.iteye.com/blog/229973 ...

  7. Spring Cloud 之 Cookie 丢失 与 Host 传递

    通过spring zuul 代理至后台,写入Cookie发现无法写入,到浏览器中,和无法获取Domain域名 通过长时间的度娘和求助别人发现:Spring-zuul  需要加入以下配置 zuul.se ...

  8. 【ACM】nyoj_47_过桥问题_201308151616

    过河问题时间限制:1000 ms  |  内存限制:65535 KB 难度:5描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的 ...

  9. 完全卸载VS2013的方法

    解压安装包的ISO文件,然后进入到根目录运行命令行: vs_ultimate.exe /uninstall /force 注意:比如ISO是Update 5的,那么卸载的只能是Update 5安装的内 ...

  10. SQLServer到底支持多少连接数的并发?

    1)不启用连接池 当创建到101个连接的时候,就无法再创建新连接了.也就是说,如果连接字符串不做任何处理,我们的程序只能够跟SQLServer建立101个连接. 2)启用连接池 在连接字符串中加入代码 ...