poj 3468
来源:互联网 发布:工资管理系统 数据库 编辑:程序博客网 时间:2024/05/20 05:26
A Simple Problem with Integers
一直在数据类型上出错。
终于知道long long 是 “%lld” 来输出输入了。
time 1732ms#include <iostream>#include <stdio.h>#define LL long longusing namespace std;const int N=100005;LL add[N<<2];LL sum[N<<2];void push_up(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; }void push_down(int rt,int m){ if(add[rt]) { add[rt<<1]+=add[rt]; add[rt<<1|1]+=add[rt]; sum[rt<<1]+=add[rt]*(m-(m>>1)); sum[rt<<1|1]+=add[rt]*(m>>1) ; add[rt]=0; }}void build(int l,int r,int rt){ add[rt]=0; if(l==r) { scanf("%lld",&sum[rt]) ; return ; } int m=(l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); push_up(rt);}void updata(int l,int r,int rt,int L,int R,int v){ if(L<=l&&R>=r) { add[rt]+=v; sum[rt]+=(LL)v*(r-l+1); return ; } push_down(rt,r-l+1); int m=(l+r)>>1; if(L<=m) updata(l,m,rt<<1,L,R,v); if(R>m) updata(m+1,r,rt<<1|1,L,R,v); push_up(rt);}LL query(int l,int r,int rt,int L,int R){ if(L<=l&&R>=r) return sum[rt]; push_down(rt,r-l+1); int m=(l+r)>>1; LL ans=0; if(L<=m) ans+=query(l,m,rt<<1,L,R); if(R>m) ans+=query(m+1,r,rt<<1|1,L,R); return ans;}int main(){ int n,m,a,b,c; char op[2]; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { scanf("%s",op); if(op[0]=='Q') { scanf("%d%d",&a,&b); printf("%lld\n",query(1,n,1,a,b)); } else { scanf("%d%d%d",&a,&b,&c); updata(1,n,1,a,b,c); } } }}
0 0
- poj 3468
- POJ 3468
- poj 3468
- poj 3468
- poj 3468
- poj 3468
- poj 3468
- POJ 3468
- POJ 3468
- POJ 3468
- POJ 3468
- POJ 3468
- poj 3468
- poj-3468
- POJ 3468
- POJ 3468
- POJ-3468
- poj 3468
- Nginx支持http文件上传的配置
- 1103 - Ancient Messages.
- PCAP研究
- Mac下安装MySQLdb报错解决
- 算法效率的度量
- poj 3468
- 【hibernate框架】性能优化之session.clear()的运用和Java内存泄露问题
- Git常用指令集合
- 利用CIDetector来人脸识别
- 机器学习演算法 第四讲 Feasibility of Learning——学习笔记k
- 解决 Visual Studio Debugger Just-In-Time Debugging
- 一个简单的可以实现分页的SqlHelper类
- Thinking in Java学习笔记
- CF 518C(Anya and Smartphone-映射)