1890

将树的每个节点都转换为区间的形式 然后再利用线段树对结点更新 这题用了延迟标记 相对普通线段树 多了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转换区间)的更多相关文章

  1. R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数

    R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...

  2. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  3. URAL 1890 . Money out of Thin Air (dfs序hash + 线段树)

    题目链接: URAL 1890 . Money out of Thin Air 题目描述: 给出一个公司里面上司和下级的附属关系,还有每一个人的工资,然后有两种询问: 1:employee x y z ...

  4. HDU 1754 I Hate It(线段树单点替换+区间最值)

    I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...

  5. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序

    题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s   内存限制:512.0MB    总提交次数:196   AC次数:65   平均分: ...

  7. BZOJ_3252_攻略_线段树+dfs序

    BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...

  8. 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序

    题目大意 ​ Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...

  9. hdu 5039 线段树+dfs序

    http://acm.hdu.edu.cn/showproblem.php?pid=5039 给定一棵树,边权为0/1.m个操作支持翻转一条边的权值或者询问树上有多少条路径的边权和为奇数. 用树形df ...

随机推荐

  1. html5学习笔记——2016/4

    HTML5新增的结构元素: section     article     aside     header     hgroup     footer     nav     figure HTML ...

  2. 如何开发 Grunt 插件

    创建 grunt 插件 准备工作:(node/npm/git 安装,在此不做赘述) yeoman generator 可以自动生成一个插件模板. 安装 yo npm install -g yo 安装 ...

  3. 编码错误设置错误报 "SyntaxError: Non-ASCII character '/xe6' "

    无意中碰到键盘导致一段处理中文拼音的 python 代码跑起来报了个错 “SyntaxError: Non-ASCII character ‘/xe6' " 看了下是注释 # coding: ...

  4. 【转】How to view word document in WPF application

    How to view word document in WPF application (CSVSTOViewWordInWPF) Introduction The Sample demonstra ...

  5. Microsoft Expression Blend 4制作简单的按钮

    在博客园混了这么久了,第一次写博客.本人标准的理工男,文笔不敢说一般,只能用还学过语文.勉强达意而已.见笑!! 由于本人能有有限,错误之处在所难免,望大牛们批评指正,共同进步.^_^!!!!!!!!! ...

  6. orcale同一条语句运行速度差异问题

    在oracle中执行一个查询语句,该语句首次执行时orcale会把其内容存入SGA(系统全局区)中,下次再执行同一条语句的时候就不再去解析该语句,而是直接从SGA区中取出该语句执行,但是前提是SQL没 ...

  7. couldnt resolve host mirrorlist.centos

     解决centos 6.3 yum安装软件时找不到镜像问题 [root@nagios-server ~]# yum update –y Loaded plugins: fastestmirror Lo ...

  8. SQL重复记录查询(转载)

     1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people )  例二:  select * from testtable  where ...

  9. iOS 进阶 第一天(0323)

    0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的 ...

  10. 【BZOJ 2744 】[HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...