PKU 3468 A Simple Problem with Integers
题目大意:
有N,M两个数
Q 表示查询, 后面两个数a b,表示查询从a 到b计算它们的和
C 表示增加 后面三个数a,b,c 表示从a开始,一直到b,每个数都增加c
除了查询要进行输出,增加不要输出
#include<iostream>
using namespace std;
#define LL(x)((x)<<1)
#define RR(x)((x)<<1|1)
struct_Seg_Tree{int left,right;long long sum;int add;int calmid(){return (left+right)/2;}int caldis(){return right-left+1;}
}tt[1000000];
int val[1000002];long long build(int l,int r,int idx){tt[idx].left=l;tt[idx].right=r;tt[idx].add=0;if(l==r){return tt[idx].sum=val[l];}return tt[idx].sum=build(l,mid,LL(idx)+build(mid+1,r,RR(idx)));
} void update(int l,int r,int add,int idx){if(l<=tt[idx].left&&r>=tt[idx].right){tt[idx].add+=add;tt[idx].sum+=(long long)tt[idx].caldis()*add;//通过乘以后来添加的数 return ; }if(tt[idx].add){tt[LL(idx).sum]+=(long long)tt[LL(idx)].caldis()*tt[idx].add;tt[RR(idx).sum]++(long long)tt[RR(idx)].caldis()*tt[idx].add;tt[LL(idx)].add+=tt[idx].add;tt[RR(idx)].add+=tt[idx].add;tt[idx].add=0; }int mid=tt[idx].calmid();if(l<=mid) update(l,r,add,LL(idx));if(mid<r) update(l,r,add,RR(idx)); tt[idx].sum = tt[LL(idx)].sum + tt[RR(idx)].sum;
}long long query(int l,int r,int idx){if(l==tt[idx].left&&r==tt[idx].right){return tt[idx].sum;}if(tt[idx].add){tt[LL(idx)].sum += (long long )tt[LL(idx)].caldis() * tt[idx].add;tt[RR(idx)].sum += (long long)tt[RR(idx)].caldis() * tt[idx].add;tt[LL(idx)].add += tt[idx].add;tt[RR(idx)].add += tt[idx].add;tt[idx].add = 0;}int mid=tt[idx].calmid();if(r<=mid){return query(l,r,LL(idx));} else if(mid<1){return query(l,r,RR(idx));} else{return query(l,mid,LL(idx)+query(mid+1,r,RR(idx));}
}int main(){int n,m;while(scanf("%d %d",&n,&m)==2){for(int i=1;i<=n;i++)scanf("%d",&val[i]);build(1,n,1);while(m--){char com[2];scanf("%s",com);if(com[0]=='Q'){int a,b;scanf("%d %d",&a,&b);pirntf("lld\n",query(a,b,1));}else{int a,b,c;scanf("%d %d %d",&a,&b,&c);update(a,b,c,1);}} }
}
PKU 3468 A Simple Problem with Integers相关推荐
- 线段树专辑—— pku 3468 A Simple Problem with Integers
http://poj.org/problem?id=3468 典型的一道基于lazy传递的线段树题目,这题和一般题目不同的地方在于,它的每次操作不是简单的覆盖线段,而是累加.记得第一次写的时候纠结了好 ...
- 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)
[线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...
- poj 3468 A Simple Problem with Integers(线段树区区)
题目链接: http://poj.org/problem?id=3468 题目大意: 给出N个数,和M次查询 C a b c 区间[a,b]的值都加上c Q a b 查询区间[a,b]值 ...
- POJ 3468 A Simple Problem with Integers(线段树:区间更新)
http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...
- POJ 3468 A Simple Problem with Integers
分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...
- POJ 3468 A Simple Problem with Integers (1)
POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...
- POJ - 3468 A Simple Problem with Integers(分块)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次操作,每次操作分为两种情况: C l r d:区间 [ l , r ] 内的数字都加上 d Q l r :查询 [ l , r ...
- POJ 3468 A Simple Problem with Integers(线段树区间更新)
题目链接 这个真费劲...其实我也不懂 为什么...大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除...多敲几遍,多调试一 ...
- poj 3243:A Simple Problem with Integers
3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制: 5000ms 单个测试点时间限制: 2000ms 内存限制: 131072 ...
- PKU A Simple Problem with Integers 3468
代码来自网上(非原创) /*题目地址 对于Q操作,求出区间的总和,对于C操作,将区间里的所有数都加上同一个数 考虑结点存放两个信息,一个是该结点区间内的和s,一个是该区间所有数的增量d,对于一个C操作 ...
最新文章
- 利用数据存储技术实现数据安全合理备份
- jvm:类加载器和类的加载过程
- Android 使用jtds远程访问数据库
- linux下mqm添加用户,Linux 下MQ的安装和配置亲测
- 让VS2005用起来更顺手
- 父亲节重读朱自清先生的《背影》
- ThreadLocal原理机制
- 通过命令在navicat中创建数据库及表结构
- 学习pytorch: API 学习
- 《数字图像处理》冈萨雷斯版 读书笔记(一)
- sobel边缘检测java_Sobel边缘检测
- 联想启天M4880(老机)安装Centos7安装总结
- Mac Sublime Text设置中文
- 去掉小数点后多余的0
- 摩拜单车深度产品体验报告
- mysql5.7应该导什么包_限定盲盒!只有快递小哥可以拆的“战马空投箱”…到底什么来头?...
- 计算机应用基础(专)【10】
- 如何快速有效提升网站的百度排名
- 轨道看盘系统 通达信选股公式 看盘指标详解主图/副图
- python将mp4转mp3
热门文章
- easyui下拉选项多怎么解决_30岁以后皮肤松弛皱纹越来越多怎么办?这组瑜伽帮你解决...
- Java基础学习(4)-动态代理
- DataTable多表合并 同结构和不同结构的合并
- mac OS X下终端使用tree命令列目录
- c++中#pragma用法详解
- 去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT:轻松搞定线性近似
- 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光等...
- 在手机上实现实时的单目3D重建
- 有哪些激光雷达SLAM算法?
- java4选择结构 二