1890. Money out of Thin Air(线段树 dfs转换区间)
将树的每个节点都转换为区间的形式 然后再利用线段树对结点更新 这题用了延迟标记 相对普通线段树 多了dfs的转换 把所要求的转换为某段区间
RE了N次 最后没办法了 记得有个加栈的语句 拿来加上A了。。
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
#define N 50010
#define LL long long
vector<int>w[N];
LL lleft[N],rright[N],po[N],c[N],cnt;
LL o[N];
LL s[N<<],te[N<<];
void up(int w)
{
s[w] = s[w<<]+s[w<<|];
}
void build(int l,int r,int w)
{
if(l==r)
{
s[w] = c[l];
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w);
}
void pushdown(int w,int d)
{
if(te[w])
{
te[w<<] += te[w];
te[w<<|]+=te[w];
s[w<<] += (d-d/)*te[w];
s[w<<|]+=d/*te[w];
te[w] = ;
}
}
void update(int a,int b,LL v,int l,int r,int w)
{
if(a<=l&&b>=r)
{
te[w] += v;
s[w] += v*(r-l+);
return ;
}
pushdown(w,r-l+);
int m = (l+r)>>;
if(a<=m)
update(a,b,v,l,m,w<<);
if(b>m)
update(a,b,v,m+,r,w<<|);
up(w);
}
LL query(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
{
return s[w];
}
pushdown(w,r-l+);
int m = (l+r)>>;
LL re =;
if(a<=m)
re+=query(a,b,l,m,w<<);
if(b>m)
re+=query(a,b,m+,r,w<<|);
return re;
}
void dfs(int u)
{
int i;
for(i = ; i < (int)w[u].size() ; i++)
{
int v = w[u][i];
dfs(v);
if(lleft[u]==-)
lleft[u] = lleft[v];
else
lleft[u] = min(lleft[v],lleft[u]);
if(rright[u]==-)
rright[u] = rright[v];
else
rright[u] = max(rright[u],rright[v]);
}
cnt++;
c[cnt] = o[u];
po[u] = cnt;
if(lleft[u]==-)
lleft[u] = cnt;
else
lleft[u] = min(lleft[u],cnt);
if(rright[u]==-)
rright[u] = cnt;
else
rright[u] = max(rright[u],cnt);
}
int main()
{
int n,q,s0,x,u,v,i;
char ss[];
memset(lleft,-,sizeof(lleft));
memset(rright,-,sizeof(rright));
scanf("%d%d%d",&n,&q,&s0);
o[] = s0;
for(i = ; i <= n ; i++)
w[i].clear();
for(i = ; i <= n ; i++)
{
scanf("%d%d",&u,&v);
u++;
w[u].push_back(i);
o[i] = v;
}
dfs();
build(,n,);
while(q--)
{
scanf("%s%d%d%d",ss,&x,&u,&v);
x++;
if(ss[]=='e')
{
int pp = po[x];
LL tx = query(pp,pp,,n,);
if(tx<u)
update(pp,pp,v,,n,);
}
else if(ss[]=='d')
{
int ll = lleft[x];
int rr = rright[x];
int nu = rr-ll+;
LL tx = query(ll,rr,,n,);
if(1.0*tx/nu<u)
update(ll,rr,v,,n,);
}
}
for(i = ; i <= n ; i++)
printf("%lld\n",query(po[i],po[i],,n,));
return ;
}
1890. Money out of Thin Air(线段树 dfs转换区间)的更多相关文章
- R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数
R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...
- 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)
To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...
- URAL 1890 . Money out of Thin Air (dfs序hash + 线段树)
题目链接: URAL 1890 . Money out of Thin Air 题目描述: 给出一个公司里面上司和下级的附属关系,还有每一个人的工资,然后有两种询问: 1:employee x y z ...
- HDU 1754 I Hate It(线段树单点替换+区间最值)
I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...
- HDU 5692 线段树+dfs序
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s 内存限制:512.0MB 总提交次数:196 AC次数:65 平均分: ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...
- hdu 5039 线段树+dfs序
http://acm.hdu.edu.cn/showproblem.php?pid=5039 给定一棵树,边权为0/1.m个操作支持翻转一条边的权值或者询问树上有多少条路径的边权和为奇数. 用树形df ...
随机推荐
- Hibernate 老外的完整教程
http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/
- Kinetic使用注意点--group
new Group(config) 参数: config:包含所有配置项的对象. { x: "横坐标", y: "纵坐标", width: "宽度&q ...
- iOS视频压缩存储至本地并上传至服务器-b
最近做了一个项目,我把其中的核心功能拿出来和大家分享一下,重点还是自己梳理一下. 这里关于视频转码存储我整理了两个方法,这两个方法都是针对相册内视频进行处理的. 1.该方法没有对视频进行压缩,只是将视 ...
- xx创新论坛返工友情项目总结
友情项目,顾名思义就不是我做的,只是处于友情帮别人改改别人的代码帮别人找找bug...之所以要强调这一点是因为里面的低级问题太多,实在是不好意思承认自己和这个项目有关系.. 整个过程还是挺辛苦的,毕竟 ...
- Dapper使用方法
这里记下Dapper容易忘的使用方法: 返回的数据可以有相同名称的列,会分配到不同的类上,默认使用Id这个列作为分割列 connection.Open(); //手动打开的话会保持长连接,否则每次查 ...
- python 读写 Excel文件
最近用python处理一个小项目,其中涉及到对excel的读写操作,通过查资料及实践做了一下总结,以便以后用. python读写excel文件要用到两个库:xlrd和xlwt,首先下载安装这两个库. ...
- PD 脚本中列名注释用Name属性
操作步骤:Database=>Generate Datatabase=>Format选项卡=>勾选 Generate name in empty comment项
- ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)
鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html ------------- ...
- hdu 4726
贪心 不是很难 各种细节注意 #include <cstdio> #include <cstring> #include <algorithm> using na ...
- uva 108
降维 枚举行累加 然后求单行上最大连续和 #include <iostream> #include <cstring> #include <cstdio> # ...