POJ 3468 A Simple Problem with Integers
来源:互联网 发布:c语言字符比大小 编辑:程序博客网 时间:2024/06/03 13:06
如果不下推会出现错误,尤其是区间修改的时候
点修改可以不用下推;
上推也不要漏掉,修改查询建树都要上推;
还有就是注意longlong类型 一个没改就不行,我当时Query返回类型忘了改一直wa,改了就过了。
#include<iostream>#include<stdio.h>#include<string>using namespace std;long long sum[500000],Add[500000]={0};void Pushdown(int rt,int m){ if(Add[rt]){ Add[rt*2]+=Add[rt]; Add[rt*2+1]+=Add[rt]; sum[rt*2]+=(m-m/2)*Add[rt]; sum[rt*2+1]+=(m/2)*Add[rt]; Add[rt]=0; }}void Pushup(int rt){ sum[rt]=sum[rt*2]+sum[rt*2+1];}void build(int l,int r,int rt){ if(l==r) { scanf("%lld",&sum[rt]);return ; } long long m=(l+r)/2; build(l,m,rt*2); build(m+1,r,rt*2+1); Pushup(rt);}void update(int L,int R,long long j,int l,int r,int rt){ if(L<=l&&R>=r) { sum[rt]+=j*(r-l+1); Add[rt]+=j; return ; } Pushdown(rt,r-l+1); long long m=(l+r)/2; if(L<=m) update(L,R,j,l,m,rt*2); if(R>m) update(L,R,j,m+1,r,rt*2+1); Pushup(rt);}long long Query(int L,int R,int l,int r,int rt){ if(L<=l&&R>=r){ return sum[rt]; } long long m=(r+l)/2; Pushdown(rt,r-l+1); long long Ans=0; if(L<=m) Ans+=Query(L,R,l,m,rt*2); if(R>m) Ans+=Query(L,R,m+1,r,rt*2+1); Pushup(rt);//注意这里也要上推; return Ans;}int main(){ int N,Q; scanf("%d%d",&N,&Q); build(1,N,1); while(Q--){ char s[10]; scanf("%s",s); if(s[0]=='C'){ long long a,b,c; scanf("%lld%lld%lld",&a,&b,&c); update(a,b,c,1,N,1); } if(s[0]=='Q'){ long long i,j; scanf("%lld%lld",&i,&j); long long ans=Query(i,j,1,N,1); printf("%lld\n",ans); } } return 0;}
阅读全文
0 0
- POJ 3468 A Simple Problem With Integers
- poj 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- POJ-3468-A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- POJ 3468 - A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- POJ 3468 A Simple Problem with Integers
- poj 3468 A Simple Problem with Integers
- leetcode Reverse Vowels of a String 反转字符串中的母音
- python学习——类、模块与包
- (M)Dynamic Programming:646. Maximum Length of Pair Chain
- 机器学习预测市场走势?——期货交易分析
- Java 对象初始化过程
- POJ 3468 A Simple Problem with Integers
- 2016 CCPC Hefei Onsite [HDU 5961、5963、5965、5969]
- nginx开启ssl
- 对象的克隆
- 【C】 结构体与结构体指针,->在C语言中的唯一用途
- 爬取微博对话语料制作聊天机器人
- Hibernate优化方案
- Java配置实现AOP
- POJ3281(最大流)