【POJ - 3468 】 A Simple Problem with Integers (线段树模板 区间更新 + 区间和查询)(不能树状数组或差分数组)

题干:

You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.

Input

The first line contains two numbers N and Q. 1 ≤ N,Q ≤ 100000.
The second line contains N numbers, the initial values of A1, A2, ... , AN. -1000000000 ≤ Ai ≤ 1000000000.
Each of the next Q lines represents an operation.
"C a b c" means adding c to each of AaAa+1, ... , Ab. -10000 ≤ c ≤ 10000.
"Q a b" means querying the sum of AaAa+1, ... , Ab.

Output

You need to answer all Q commands in order. One answer in a line.

Sample Input

10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4

Sample Output

4
55
9
15

Hint

The sums may exceed the range of 32-bit integers.

解题报告:

       有的同学会说,这不是动态差分数组吗?所以可以树状数组啊,树状数组的单点查询区间更新就是进化版的差分数组啊,是这样说没错,但是你要知道,单点查询是动态的,但是这里是区间查询,所以你需要算前缀和,而前缀和是离线查询的!不能动态

AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAX = 100000 + 5;
int n,m;
struct TREE {int l,r;ll val;ll laz;
} tree[4*MAX];
int a[MAX];
void pushup(int cur) {tree[cur].val = tree[2*cur].val + tree[2*cur + 1].val;
}
void pushdown(int l,int r,int cur) {if(tree[cur].laz == 0) return ;int m = (l + r)/2;tree[2*cur].val += (m-l+1) * tree[cur].laz;tree[2*cur].laz += tree[cur].laz;tree[2*cur+1].val += (r-m) * tree[cur].laz;tree[2*cur+1].laz += tree[cur].laz;tree[cur].laz = 0;
}
void build(int l,int r,int cur) {if(l == r) {tree[cur].l = tree[cur].r = l;tree[cur].val = a[r];tree[cur].laz = 0;return ;}int m = (l+r)/2;tree[cur].l = l; tree[cur].r = r;build(l,m,2*cur);build(m+1,r,2*cur+1);pushup(cur);
}
void update(int pl,int pr,ll val,int l,int r,int cur) {if(pl <= l && pr >= r) {tree[cur].val += (r-l+1)*val;tree[cur].laz += val;return ;}pushdown(l,r,cur);int m = (l + r)/2;if(pl <= m) update(pl,pr,val,l,m,2*cur);if(pr >= m+1) update(pl,pr,val,m+1,r,2*cur+1);pushup(cur);
}
ll query(int pl,int pr,int l,int r,int cur) {if(pl <= l && pr >= r) return tree[cur].val;pushdown(l,r,cur);int m = (l+r)/2;ll ans = 0 ;if(pl <= m ) ans += query(pl,pr,l,m,2*cur);if(pr >= m+1) ans += query(pl,pr,m+1,r,2*cur+1);//别写成cur了 return ans; 
}
int main()
{cin>>n>>m;int tmp1,tmp2;ll tmp3;char op[10];for(int i = 1; i<=n; i++) {scanf("%lld",&a[i]);}build(1,n,1);while(m--) {scanf("%s",op);if(op[0] == 'C') {scanf("%d%d%lld",&tmp1,&tmp2,&tmp3); update(tmp1,tmp2,tmp3,1,n,1);}else {scanf("%d%d",&tmp1,&tmp2);printf("%lld\n",query(tmp1,tmp2,1,n,1));}}return 0 ;} 

总结:

    1WA了,因为pushdown的laz修改的时候有个地方写成了=  应该是+= 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php向下滑动,js如何判断鼠标滚轮是向下还是向上滚动

判断鼠标滚轮是向上或向下滚动&#xff0c;不同的浏览器的判别方式是不一样的&#xff0c;当前比较流行的浏览器有 IE&#xff0c;Opera&#xff0c;Safari&#xff0c;Firefox&#xff0c;Chrome&#xff0c;在这个问题上Firefox和其他浏览器的实现方式是不一样的。现在通过一…

学习php技巧,对初学者非常有用的PHP技巧

对初学者非常有用的PHP技巧131415161718function add_to_cart($item_id , $qty){if(!is_array($item_id)){$_SESSION[cart][$item_id] $qty;}else{foreach($item_id as $i_id > $qty){$_SESSION[cart][$i_id] $qty;}}}add_to_cart( IPHONE3 , 2 );add_to_cart( array(IPHO…

【51nod - 1065】 最小正子段和( 前缀和排序 )

题干&#xff1a; N个整数组成的序列a11,a22,a33,…,ann&#xff0c;从中选出一个子序列&#xff08;aii,ai1i1,…ajj&#xff09;&#xff0c;使这个子序列的和>0&#xff0c;并且这个和是所有和>0的子序列中最小的。 例如&#xff1a;4&#xff0c;-1&#xff0c;5&a…

oracle trace 文件名,限制oracle trace 文件大小

限制oracle trace 文件大小2007-10-10 17:34:55| 分类&#xff1a; oracle | 标签&#xff1a;|字号max_dump_file_size参数在oracle数据库中用来限制 oracle trace 文件大小max_dump_file_size 的单位是 操作系统块 默认值为 UNLIMITED在有些时候&#xff0c;oracle会产生…

【51nod - 前缀异或】 对前缀和的理解

题干&#xff1a; 前缀异或 基准时间限制&#xff1a;2 秒 空间限制&#xff1a;131072 KB 分值: 5 输入一个长度为n(1 < n < 100000)数组a[1], a[2], ..., a[n]。 输入一个询问数m(1 < m < 100000)和m组询问&#xff0c;每组询问形如(l, r) 对于每组询问(l, …

【C语言实现反转数组】(用栈实现)51nod - 训练营

题干&#xff1a; 输入一个长度为n(1 < n < 100000)数组&#xff0c;倒序输出他。 数组中的元素ai满足(1 < ai < 100000)。 Input 第一行一个整数n&#xff0c;表示数字长度 接下来n行&#xff0c;每行一个整数ai&#xff0c;表示数组的内容。 Output 输出第…

oracle 依赖包自动安装包,ORACLE 安装提示缺少依赖包

安装ORALCE 在做检验时提示缺少依赖包&#xff0c;其实是因为系统是64位系统而这些包都是32位的&#xff0c;This is a prerequisite condition to test whether the package "libaio-0.3.105" is available on the systemThis is a prerequisite condition to test…

oracle中创建实体,生成实体-SqlSugar 4.x-文档园

注意&#xff1a;使用DbFirst数据库账户要有系统表的权限,否则无法读取表的结构1.将库里面所有表都生成实体类文件db.DbFirst.CreateClassFile("c:\\Demo\\1",命名空间);2.指定名表生成 &#xff0c;可以传数组db.DbFirst.Where("Student").CreateClassFil…

永远年轻,永远热泪盈眶----致所有奋斗的ACMer

转载一个弱校ACMer的生涯回忆录&#xff1a;&#xff08;励志一下&#xff0c;顺便给自己一碗鸡汤~&#xff09; 有些事情&#xff0c;承诺了便要将它实现&#xff0c;就像我现在写下这些文字。或许之前我并不该定下“每个退役队员写一篇退役贴”这样一个规矩&#xff0c;这多少…

oracle pl/sql 面试,Oracle SQL 面试题(整理)

1、关于group by表内容&#xff1a;2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成下列结果, 该如何写sql语句?胜 负2005-05-09 2 22005-05-10 1 2创建过程如下&#xff1a;create table tmp(rq varchar(10),shengf…

【HDU - 5094】 Maze (状态压缩+bfs)

题干&#xff1a; This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enterprise, fell into Klingon’s trick and was held as prisoner on their mother planet Qo’noS. The captain of Enterprise, James T. Kirk, had to f…

oracle idl_ub1$,system表空间急剧增大原因分析

system表空间增大是正常的&#xff0c;但急剧增大是不合理的。1有可能是用户对象错误的放在系统表空间中2也可能是system表空间的UNDO过大3还有可能和高级复制的空间使用有关可通过如下语句查看一下是不是有应用的段放到了SYSTEM中&#xff1a;select OWNER,SEGMENT_NAME,SEGME…

【HDU - 1087】Super Jumping! Jumping! Jumping! (最大上升子序列类问题,dp)

题干&#xff1a; Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now. The game can be played by two or more than two pl…

oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库

最近遭遇了 oralce 监听服务启动了 又自行关闭的 悲惨经历我把我的过程和大家分享一下&#xff01;1)排查原因程序员是懒惰的&#xff0c;我始终都希望能够成功启动监听服务&#xff0c;但是就是事与愿违有一下方式可能不能成功启动监听1.端口占用&#xff0c;oralce 要用到152…

linux串口写入命令失败,linux – 从串口读取失败

我有以下C程序&#xff1a;#include #include #include int main(){int fd open("/dev/ttyS0",O_RDWR | O_NOCTTY | O_NONBLOCK);if(fd < 0){perror("Could not open device");}printf("Device opened\n");struct termios options;tcgetattr…

【HDU - 1172】猜数字 (枚举暴力)

题干&#xff1a; 猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的&#xff1a;计算机随机产生一个四位数&#xff0c;然后玩家猜这个四位数是什么。每猜一个数&#xff0c;计算机都会告诉玩家猜对几个数字&#xff0c;其中有几个数字在正确的位置上。 比如计算机随…

linux内核支持的加密算法,Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口...

本文将主要介绍&#xff0c;如何在应用程序空间中(user space) 调用内核空间(kernel space)加密模块提供的加密算法API。方法一&#xff1a;通过调用crypto: af_alg - User-space interface for Crypto API&#xff0c; Herbert Xu 2010年&#xff0c;给内核2.6.X 接口实现下面…

【HDU - 2571】 命运(记忆化搜索)

题干&#xff1a; 穿过幽谷意味着离大魔王lemon已经无限接近了&#xff01; 可谁能想到&#xff0c;yifenfei在斩杀了一些虾兵蟹将后&#xff0c;却再次面临命运大迷宫的考验&#xff0c;这是魔王lemon设下的又一个机关。要知道&#xff0c;不论何人&#xff0c;若在迷宫中被…

【HDU - 2089 】不要62 (dp)

题干&#xff1a; 杭州人称那些傻乎乎粘嗒嗒的人为62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可…

nmon监控linux内存,使用Nmon监控Linux系统性能

Nmon (又称 Nigel’s Monitor) 是一款常用的系统性能监视工具&#xff0c;由 IBM 工程师 Nigel Griffiths 开发&#xff0c;适用于 AIX 和 Linux 操作系统。该工具可以直接在屏幕上显示当前操作系统的资源利用率&#xff0c;以帮助大家找出系统瓶颈和协助系统调优。由于其十分出…