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 ...
随机推荐
- call callb callp区别
对于刚刚接触ILE模式开发的初级菜鸟而言,想要搞清楚这三者的区别还是有点难度的.网上虽然一些帖子对这三者进行了比较,但是这些帖子或是语焉不详,或是高度概括.对于老鸟来说或许已经足矣,但是对于初级菜鸟而 ...
- Pox组件
最近在学习Pox,为了加深印象,对Pox wiki中的Pox组件写了些笔记. 按照组件的功能进行分类: L2层地址学习.洪泛 forwarding.hub forwarding.l2_lear ...
- UVA 524
Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...
- 2014年辛星完全解读Javascript第六节 对象
随着面向对象的普及,现在很多语言都在支持面向对象,Javascript也不例外,所谓对象,就是拥有属性和方法的数据.这里的属性其实就是变量,这里的方法,其实就是函数.但是Javascript的面向对象 ...
- RegisterClientScriptBlock CommandName 模块列 操作完成 提示
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "Remind", "alert('获取成功!') ...
- hadoop可能遇到的问题
1.hadoop运行的原理? 2.mapreduce的原理? 3.HDFS存储的机制? 4.举一个简单的例子说明mapreduce是怎么来运行的 ? 5.面试的人给你出一些问题,让你用mapreduc ...
- Mac OS X 10.10 Yosemite PHP 5.5.14 free type support fix
通过将php将至5.4来勉强支持freetype扩展,不推荐此方法 after upgrading to new Mac OS X Yosemite, i noticed that free type ...
- Mvc设计模型与三层架构
Mvc(Model-View-Controller):是软件架构的一中设计模式,对软件进行分割成3个层次:视图.模型.控制. 实现对软件的一种动态的设计,并且容易对软件进行扩展.后期的修改,使某些程序 ...
- DataTableExtensions.AsEnumerable 方法
在下面的示例中,DisplayProducts 方法接收一个数据表,其中包含名为 ProductName一个 DataColumn,提取 ProductName 值,然后输出值. using Syst ...
- $.post()返回数据正常,但不执行success回调函数
今天遇到一特郁闷的问题,如题:$.post()返回数据正常,但不执行success回调函数.说它郁闷是因为没毕业之前就遇到过解决了,却没有记录下来,导致卡了一下午. 像这样,post返回数据正常,但却 ...