原来左偏树还可以打tag,get了

和线段树打tag一样,时不时Push_Down就好了

然后这里显然也是要先乘法后加法的

tag打上了之后还是其他一般左偏树差不多,有些细节注意一下

然后开 long long!!!

 #include<bits/stdc++.h>
#define int long long
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int M = 3e5+;
int a[M],h[M],v[M],c[M],n,m,head[M],ver[M<<],nxt[M<<],tot,val[M],son[M][],dis[M],fa[M];
int mul[M],add[M],dep[M],ans1[M],ans2[M];
inline void Add(int x,int y){ver[++tot]=y;nxt[tot]=head[x];head[x]=tot;}
#define ls son[x][0]
#define rs son[x][1]
inline void Down(int x,int mull,int addd){
if(!x) return;
val[x]*=mull,val[x]+=addd;
mul[x]*=mull,add[x]*=mull,add[x]+=addd;
}
inline void Push_Down(int x){
Down(ls,mul[x],add[x]);
Down(rs,mul[x],add[x]);
mul[x]=,add[x]=;
}
int Merge(int x,int y){
if(!x||!y) return x|y;
Push_Down(x);Push_Down(y);
if(val[x]>val[y]) swap(x,y);
rs=Merge(rs,y);
if(dis[ls]<dis[rs]) swap(ls,rs);
dis[x]=dis[rs]+;
return x;
}int Pop(int x){return Merge(ls,rs);}
void dfs(int x){
for(int i=head[x];i;i=nxt[i]){
dep[ver[i]]=dep[x]+;
dfs(ver[i]);
fa[x]=Merge(fa[x],fa[ver[i]]);
}
while(fa[x]&&val[fa[x]]<h[x]){
Push_Down(fa[x]);
ans1[x]++;ans2[fa[x]]=dep[c[fa[x]]]-dep[x];
fa[x]=Pop(fa[x]);
}if(a[x]) Down(fa[x],v[x],);
else Down(fa[x],,v[x]);
}
signed main(){
n=read(),m=read();
for(int i=;i<=n;i++) h[i]=read();
for(int x,i=;i<=n;i++) x=read(),Add(x,i),a[i]=read(),v[i]=read();
for(int i=;i<=m;i++){
val[i]=read(),c[i]=read(),mul[i]=;
fa[c[i]]=Merge(fa[c[i]],i);
}dep[]=,dfs();
while(fa[]){
Push_Down(fa[]);
ans2[fa[]]=dep[c[fa[]]];
fa[]=Pop(fa[]);
}
for(int i=;i<=n;i++) writeln(ans1[i]);
for(int i=;i<=n;i++) writeln(ans2[i]);
return ;
}

【左偏树】 [JLOI2015]城池攻占的更多相关文章

  1. luogu3261 懒惰左偏树 [JLOI2015]城池攻占

    目录 题目 思路 错误&&反思 代码 题目 luogu 原来左偏树真的能懒惰下放 那这篇博客应该要咕咕了 一开始我按照那篇博客想了一下,感觉emm,还是瞄了一眼看到了pushdown ...

  2. 【BZOJ4003】【JLOI2015】城池攻占(左偏树)

    题面 题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi ...

  3. [JLOI2015]城池攻占 左偏树

    题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi &l ...

  4. 【左偏树】【P3261】 [JLOI2015]城池攻占

    Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其 ...

  5. [luogu3261 JLOI2015] 城池攻占 (左偏树+标记)

    传送门 Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的 ...

  6. [洛谷P3261] [JLOI2015]城池攻占(左偏树)

    不得不说,这道题目是真的难,真不愧它的“省选/NOI-”的紫色大火题!!! 花了我晚自习前半节课看题解,写代码,又花了我半节晚自习调代码,真的心态爆炸.基本上改得和题解完全一样了我才过了这道题!真的烦 ...

  7. P3261 [JLOI2015]城池攻占 (左偏树+标记下传)

    左偏树还是满足堆的性质,节点距离就是离最近的外节点(无左或者右儿子  或者二者都没有)的距离,左偏性质就是一个节点左儿子的距离不小于右儿子,由此得:节点距离等于右儿子的距离+1. 本题就是对于每个节点 ...

  8. BZOJ 4003: [JLOI2015]城池攻占 左偏树 可并堆

    https://www.lydsy.com/JudgeOnline/problem.php?id=4003 感觉就是……普通的堆啊(暴论),因为这个堆是通过递归往右堆里加一个新堆或者新节点的,所以要始 ...

  9. BZOJ 4003 / Luogu P3261 [JLOI2015]城池攻占 (左偏树)

    左偏树裸题,在树上合并儿子传上来的堆,然后小于当前结点防御值的就pop掉,pop的时候统计答案. 修改的话就像平衡树一样打懒标记就行了. 具体见代码 CODE #include<bits/std ...

随机推荐

  1. pytorch实现kaggle猫狗识别

    参考:https://blog.csdn.net/weixin_37813036/article/details/90718310 kaggle是一个为开发商和数据科学家提供举办机器学习竞赛.托管数据 ...

  2. NX二次开发-UF_MODL_ask_distance_tolerance获取建模的长度公差

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize() ...

  3. NX二次开发-设置经典工具栏的可见性UF_UI_set_toolbar_vis

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  4. IOS自动化打包介绍

    IOS自动化打包介绍  标签: app打包 , Ios打包 , iphone打包 , iphone自动化打渠道包    分类:无线客户端技术, 贴吧技术 摘要 随着苹果手持设备用户的不断增加,ios应 ...

  5. Xcode输出中文

    重写NSArray和NSDictionary分类Category就OK了! 导入头文件 #import <objc/runtime.h> + (void)load { static dis ...

  6. SElinux(转)

    转自:http://www.361way.com/rh134-selinux/4653.html RH134小结(四)初识SElinux 2015年8月2日admin发表评论阅读评论   一.SEli ...

  7. jQuery Ajax请求 .net 一般处理程序

    初学ajax 一个简单的功能,调试了2个小时,代码如下虽然成功了 但是有错误 <!DOCTYPE html> <html> <head> <meta http ...

  8. 17-Ubuntu-文件和目录命令-切换目录-相对路径和绝对路径

    1.相对路径: 在输入路径时,最前面不是/或者~,表示相对当前目录所在的目录位置. 例:当前桌面目录下,通过相对路径切换到桌面目录下的Entertainment目录 2.绝对路径: 在输入路径时,最前 ...

  9. IOS中iframe的滚动条不启作用

    引自:https://www.cnblogs.com/weinan/archive/2013/01/05/2832800.html 问题描述: iframe设置了高度(例如500px).倘若ifram ...

  10. java笔试之字符串加密

    有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙.下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS.如果单词中包含有重复的字母,只保留第1个,其余几个丢弃.现在,修改 ...