原来左偏树还可以打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. [转]C# 将类的内容写成JSON格式的字符串

    将类的内容写入到JSON格式的字符串中 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; ...

  2. jquery操作html元素之(添加元素)

    添加新的 HTML 内容 我们将学习用于添加新内容的四个 jQuery 方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在 ...

  3. nodejs中命令行和node交互模式的区分

    来自:廖雪峰教程 么么哒~ 命令行模式和Node交互模式 请注意区分命令行模式和Node交互模式. 看到类似C:\>是在Windows提供的命令行模式: 在命令行模式下,可以执行node进入No ...

  4. hashCode和identityHashCode的区别你知道吗?

    hashCode 关于hashCode参考之前的文章,点击参考之前文章. identityHashCode identityHashCode是System里面提供的本地方法,java.lang.Sys ...

  5. abstract类中method

    一.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不可以,因为abstract申明的方法是要求子类去实现的,abstrac ...

  6. iOS音频开发系列-概述篇

    概述 iOS中对于音频的处理,苹果提供了两个库. AVFoundation AudioToolbox 在iOS系统中apple对上述的流程进行了封装并提供了不同层次的接口

  7. iOS开发系列-异常处理

    概述 在开发中经常调用苹果的API遇到数组越界.实例方法不存在运行时等致命错误,此时程序直接奔溃.其实苹果是在函数内部抛出了一个异常.这样告诉开发者需要检查代码做修改.同样在我们自己封装一些框架或者功 ...

  8. Aop 简单实例

    一 , 定义aop @Aspect @Component public class MyAspect { //* com 这里有个 空格 ! @Pointcut("execution(* c ...

  9. marktext常用快捷键使用说明

     快捷键使用 功能 快捷键 备注 X级标题 ctrl+X X∈[1~6] 加粗 Ctrl+B 标题默认加粗 倾斜 Ctrl+I 插入表格 Ctrl+T 侧边文件信息显示 Ctrl+J 删除线 Ctrl ...

  10. Linux 指令查询帮助

    man +指令名 例子: man rename