用左偏树模拟攻占的过程,维护最小值,最多入和出m次,每次log复杂度。

 #include<bits/stdc++.h>
using namespace std;
const int N=3e5+;
typedef long long ll;
ll w[N],v[N],mul[N],add[N],h[N];
int l[N],r[N],dis[N],flag[N],c[N],rt[N],head[N],f[N],d[N],die[N],a[N],n,m,cnt;
struct edge
{
int to,nex;
}e[N<<];
void adde(int x,int y)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;
}
void pushdown(int x)
{
if(mul[x]>)
{
mul[l[x]]*=mul[x];mul[r[x]]*=mul[x];
add[l[x]]*=mul[x];add[r[x]]*=mul[x];
}
if(add[x])
{
add[l[x]]+=add[x];add[r[x]]+=add[x];
}
w[l[x]]*=mul[x];w[l[x]]+=add[x];
w[r[x]]*=mul[x];w[r[x]]+=add[x];
mul[x]=;add[x]=;
}
int merge(int x,int y)
{
if(!x||!y)return x+y;
pushdown(x);pushdown(y);
if(w[x]>w[y])swap(x,y);
r[x]=merge(r[x],y);
if(dis[r[x]]>dis[l[x]])swap(l[x],r[x]);
dis[x]=dis[r[x]]+;
return x;
}
void dfs(int x,int fa)
{
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(y==fa)continue;
d[y]=d[x]+;dfs(y,x);rt[x]=merge(rt[x],rt[y]);
}
while(rt[x]&&w[rt[x]]<h[x])
{
pushdown(rt[x]);
die[rt[x]]=d[c[rt[x]]]-d[x];
flag[x]++;rt[x]=merge(l[rt[x]],r[rt[x]]);
}
if(a[x])mul[rt[x]]*=v[x],add[rt[x]]*=v[x],w[rt[x]]*=v[x],pushdown(rt[x]);
else add[rt[x]]+=v[x],w[rt[x]]+=v[x],pushdown(rt[x]);
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)scanf("%lld",&h[i]);
for(int i=;i<=n;++i)
{
scanf("%d%d%lld",&f[i],&a[i],&v[i]);
adde(i,f[i]);adde(f[i],i);
}
for(int i=;i<=m;++i)
{
scanf("%lld%d",&w[i],&c[i]);
rt[c[i]]=merge(rt[c[i]],i);
mul[i]=;
}
d[]=;dfs(,);
while(rt[])pushdown(rt[]),die[rt[]]=d[c[rt[]]],rt[]=merge(l[rt[]],r[rt[]]);
for(int i=;i<=n;++i)printf("%d\n",flag[i]);
for(int i=;i<=m;++i)printf("%d\n",die[i]);
return ;
}

最新文章

  1. 。Java注意事项
  2. 从源代码分析Android-Universal-Image-Loader的缓存处理机制
  3. web压力测试 - http_load
  4. laravel的多态关联--morphTo和morphMany
  5. Event Sourcing - ENode(二)
  6. 执行PHP脚本时遇到 mysql_connect(): Headers and client library minor version mismatch的解决方法
  7. 多线程 Synchronized关键字和Lock
  8. 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,
  9. Qt学习--信号与槽(多窗口的实现)
  10. mysql第一天【mysqldump导出数据和mysql导入数据】
  11. SpringBoot中自定义properties文件配置参数并带有输入提示
  12. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架
  13. 一篇很好的java异常框架讲解
  14. 第二节:创建模型,使用Code First,配置映射关系
  15. .NET在IE10下的回传BUG修复
  16. Java集合类 课后练习
  17. Ubuntu打开core dump
  18. Django models拆分
  19. c/c++链表的实现
  20. FineReport——决策系统组件API

热门文章

  1. 【DS】排序算法之插入排序(Insertion Sort)
  2. OpenResty 高阶实战之————Redis授权登录使用短连接(5000)和长连接(500W) 使用连接池AB压力测试结果
  3. python学习笔记6--操作Mysql
  4. JAVA多线程之线程的挂起与恢复(suspend方法与resume方法)
  5. [整理]HTML5 WebSocket
  6. ftp 服务
  7. [MySQL 5.6] GTID实现、运维变化及存在的bug
  8. Spring容器是如何实现 Bean 自动注入(xml)
  9. 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
  10. 【Pyhon】获取文件MIME类型,根据文件类型自定义文件后缀