博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3468 A Simple Problem with Integers(线段树|成段更新,区间查询)
阅读量:4072 次
发布时间:2019-05-25

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

链接:

题目大意:

有N个整数:A1, A2, ... , AN。 然后对这个整数序列有两种操作:

1. C  a  b  c :   把Aa, Aa+1, ... , Ab所有元素都加上c

2.  Q  a  b :     查询Aa, Aa+1, ... , Ab之和。

分析与总结:

经典线段树题目,线段树的成段更新。  

代码:

#include
#include
#include
#define mem(str,x) memset(str,(x),sizeof(str))#define len (right-left+1)#define mid ((left+right)>>1)#define lson rt<<1,left,m#define rson rt<<1|1,m+1,rightusing namespace std;typedef long long int64;const int MAXN = 100005;int64 sum[MAXN<<2], col[MAXN<<2];inline void push_up(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1];}inline void push_down(int rt,int _len){ if(col[rt]){ int l = rt<<1, r = rt<<1|1, m = _len>>1; col[l] += col[rt]; col[r] += col[rt]; sum[l] += col[rt] * (_len-m); sum[r] += col[rt] * m; col[rt] = 0; }}void build(int rt,int left,int right){ col[rt] = 0; sum[rt] = 0; if(left==right){ scanf("%lld", &sum[rt]); col[rt] = 0; return; } int m = mid; build(lson); build(rson); push_up(rt);}void update(int rt,int left,int right,int l,int r,int add){ if(l<=left && right<=r){ col[rt] += add; sum[rt] += add*len; return; } push_down(rt,len); int m = mid; if(l <= m) update(lson,l,r,add); if(r > m) update(rson,l,r,add); push_up(rt);}int64 query(int rt,int left,int right,int l,int r){ if(left==l && right==r)return sum[rt]; push_down(rt,len); int m = mid; if(r <= m) return query(lson,l,r); else if(l > m) return query(rson,l,r); else return query(lson,l,m)+query(rson,m+1,r);}int main(){ int n,m,a,b,c; char cmd[3]; while(~scanf("%d%d",&n,&m)){ build(1,1,n); for(int i=0; i

 ——  生命的意义,在于赋予它意义士。

          原创  , By   D_Double  (转载请标明)

你可能感兴趣的文章
java 为啥变量名前要加个m?
查看>>
[AS3] 问个很囧的问题: 如何遍历Dictionary?
查看>>
Unity3D面试题汇总
查看>>
AS3声音录音
查看>>
[本人开发的游戏] Discuz网页动物园插件1.0Beta发布!让积分流动起来!
查看>>
Lambda 表达式(C# 编程指南)
查看>>
Flash Builder快捷键
查看>>
flex4的s:states和mx:states的区别
查看>>
as3 Point
查看>>
测试 Mono 安装
查看>>
服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?
查看>>
Linux+Mono+Asp.net入门:05CentOs安装Mono(上)
查看>>
Adobe Scout 入门
查看>>
Adobe Scout 使用参考说明
查看>>
曼哈顿距离算法
查看>>
flex+AS3编程规范
查看>>
Flex xml编辑器(老外写的)
查看>>
flex4 s:Datagrid <s:typicalItem
查看>>
传奇的通迅协议与base64算法
查看>>
判断线段和矩形是否相交
查看>>