poj 3468 线段树 成段增减 区间求和
题意:Q是询问区间和,C是在区间内每个节点加上一个值
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
- # include <iostream>
- # include <cstdio>
- # include <cstring>
- # include <algorithm>
- # include <cmath>
- # include <queue>
- # define LL long long
- using namespace std ;
- const int maxn = ;
- LL sum[maxn<<] ; //结点开4倍
- LL add[maxn<<] ; //延迟标记
- void PushUP(int rt) //更新到父节点
- {
- sum[rt] = sum[rt * ] + sum[rt * + ] ; //rt 为当前结点
- }
- void PushDown(int rt , int m ) //向下更新
- {
- if (add[rt])
- {
- add[rt * ] += add[rt] ;
- add[rt * + ] += add[rt] ;
- sum[rt * ] += (m - m / ) * add[rt] ;
- sum[rt * + ] += (m / ) * add[rt] ;
- add[rt] = ;
- }
- }
- void build(int l , int r , int rt) //构建线段树
- {
- add[rt] = ;
- if (l == r)
- {
- cin>>sum[rt];
- return ;
- }
- int m = (l + r) / ;
- build(l , m , rt * ) ;
- build(m + , r , rt * +) ;
- PushUP(rt) ;
- }
- void updata(int L , int R , int c , int l , int r , int rt) //成段增减
- {
- if (L <= l && r <= R)
- {
- add[rt] += c ;
- sum[rt] += (r - l + ) * c ;
- return ;
- }
- PushDown(rt , r - l + ) ;
- int m = (l + r) / ;
- if (L <= m)
- updata(L , R , c , l , m , rt * ) ;
- if (R > m)
- updata(L , R , c , m + , r , rt * + ) ;
- PushUP(rt) ;
- }
- LL query(int L , int R , int l , int r , int rt) //区间求和
- {
- if (L <= l && r <= R)
- return sum[rt] ;
- PushDown(rt , r - l + ) ;
- int m = (l + r) / ;
- LL ret = ;
- if (L <= m)
- ret += query(L , R , l , m , rt * ) ;
- if (R > m)
- ret += query(L , R , m + , r , rt * + ) ;
- return ret ;
- }
- int main ()
- {
- //freopen("in.txt","r",stdin) ;
- int n , m ;
- scanf("%d %d" , &n , &m) ;
- build( , n , ) ;
- while(m--)
- {
- char op[] ;
- int a , b , c ;
- scanf("%s" , op) ;
- if(op[] == 'Q')
- {
- scanf("%d %d" , &a , &b) ;
- cout<<query(a , b , , n , )<<endl ;
- }
- else
- {
- scanf("%d %d %d" , &a , &b , &c) ;
- updata(a , b , c , , n , ) ;
- }
- }
- return ;
- }
poj 3468 线段树 成段增减 区间求和的更多相关文章
- POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)
A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...
- POJ 3468 线段树 成段更新 懒惰标记
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072K Case Time Limit:2000MS Descr ...
- poj 3669 线段树成段更新+区间合并
添加 lsum[ ] , rsum[ ] , msum[ ] 来记录从左到右的区间,从右到左的区间和最大的区间: #include<stdio.h> #define lson l,m,rt ...
- poj 3468 线段树成段更新
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 54012 ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- poj 3648 线段树成段更新
线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...
- 线段树---poj3468 A Simple Problem with Integers:成段增减:区间求和
poj3468 A Simple Problem with Integers 题意:O(-1) 思路:O(-1) 线段树功能:update:成段增减 query:区间求和 Sample Input 1 ...
- POJ训练计划2777_Count Color(线段树/成段更新/区间染色)
解题报告 题意: 对线段染色.询问线段区间的颜色种数. 思路: 本来直接在线段树上染色,lz标记颜色.每次查询的话訪问线段树,求出颜色种数.结果超时了,最坏的情况下,染色能够染到叶子节点. 换成存下区 ...
- C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)
参考qsc大佬的视频 太强惹 先膜一下 视频在b站 直接搜线段树即可 #include<cstdio> using namespace std; ; int n,a[maxn]; stru ...
随机推荐
- TCP协议 连接三次握手
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- oracle 每个类别取几条的语法怎么写
select *from (select t.*,row_number() over(partition by t.公司名 order by 1) rn from t)where rn<=10
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...
- 【Vijos1404】遭遇战(最短路)
[Vijos1404]遭遇战(最短路) 题面 Vijos 题解 显然可以树状数组之类的东西维护一下\(dp\).这里考虑一种最短路的做法. 首先对于一个区间\([l,r]\),显然可以连边\((l,r ...
- BZOJ4589 Hard Nim(快速沃尔什变换FWT)
这是我第一道独立做出来的FWT的题目,所以写篇随笔纪念一下. (这还要纪念,我太弱了) 题目链接: BZOJ 题目大意:两人玩nim游戏(多堆石子,每次可以从其中一堆取任意多个,不能操作就输).$T$ ...
- debian开启cgroup memory子系统
Debian系统默认是关闭cgroup memory子系统的. 1.修改grub启动参数 # vim /etc/default/grub GRUB_CMDLINE_LINUX="cgroup ...
- 用rem来做响应式开发(转)
由于最近在做公司移动项目的重构,因为要实现响应式的开发,所以大量使用到了rem的单位,觉得这个单位有点意思.但是现在貌似用他的人很少.上一篇文章我分享了淘宝写的一篇rem的介绍,介绍的非常全面,但是他 ...
- JSON.parseObject(String str)与JSONObject.parseObject(String str)的区别
一.首先来说说fastjson fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发.其主要特点是: ① 快速:fastjson采用独创的算法, ...
- ubuntu,centor 安装apache bench
ab全称为:apache bench. 是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.to ...
- 使用pandas导入csv文件到MySQL
之前尝试过用命令行来解决csv文件导入到MySQL这个问题,没想到一直没有成功.之后会继续更新的吧,现在先用pandas来解决这个问题,虽然会复杂一点,但至少能用. 例子是导入movielens的ra ...