博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3468 A Simple Problem with Integers
阅读量:5052 次
发布时间:2019-06-12

本文共 1949 字,大约阅读时间需要 6 分钟。

题目大意:给一组数据,Q 为查询求a,b区间和,C为为区间a,b间的各个元素都加上c。

题目思路:线段树模板

#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f#define MAX 1000005#define Temp 1000000000using namespace std;long long a[MAX];struct node{ int l,r,root; long long s,e;}tree[MAX];void MakeTree(int L,int R,int root){ tree[root].l=L; tree[root].r=R; tree[root].e=0; int Mid=(L+R)/2; if(L==R) { tree[root].s=a[L]; return; } MakeTree(L,Mid,root*2); MakeTree(Mid+1,R,root*2+1); tree[root].s=tree[root*2].s+tree[root*2+1].s;}void Down(int root){ tree[root*2].s+=(tree[root*2].r - tree[root*2].l + 1)*tree[root].e; tree[root*2+1].s+=(tree[root*2+1].r - tree[root*2+1].l + 1)*tree[root].e; tree[root*2].e+=tree[root].e; tree[root*2+1].e+=tree[root].e; tree[root].e=0;}void UpDate(int L,int R,int date,int root){ tree[root].s+=(R-L+1)*date; int Mid=(tree[root].l + tree[root].r)/2; if(tree[root].l==L && tree[root].r==R) { return; } Down(root); if(R <= Mid) UpDate(L,R,date,root*2); else if(L > Mid) UpDate(L,R,date,root*2+1); else { UpDate(Mid+1,R,date,root*2+1); UpDate(L,Mid,date,root*2); }}long long Query(int L,int R,int root){ if(tree[root].l==L && tree[root].r==R) { return tree[root].s; } Down(root); int Mid=(tree[root].l + tree[root].r)/2; if(R <= Mid) return Query(L,R,root*2); else if(L > Mid) return Query(L,R,root*2+1); else { long long lsum=Query(L,Mid,root*2); long long rsum=Query(Mid+1,R,root*2+1); return lsum+rsum; }}int main(){ int n,m,l,r,date; char op[2]; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } MakeTree(1,n,1); while(m--) { scanf("%s",op); if(op[0]=='Q') { scanf("%d%d",&l,&r); long long ans = Query(l,r,1); printf("%lld\n",ans); } else { scanf("%d%d%d",&l,&r,&date); UpDate(l,r,date,1); } } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/alan-W/p/5899542.html

你可能感兴趣的文章
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>
关于页面<!DOCTYPE>声明
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
C++标准库vector使用(更新中...)
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>