线段树 区间查询区间修改 poj 3468
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
const ll maxn=1e5+;
ll ary[maxn];
struct node
{
ll l,r,val;
ll add;
}tree[maxn<<];
void pushup(ll cur)
{
tree[cur].val=tree[cur<<].val+tree[cur<<|].val;
}
void down(ll cur,ll len)
{
if(tree[cur].add){
tree[cur<<].val+=(len-(len>>))*tree[cur].add;
tree[cur<<|].val+=(len>>)*tree[cur].add;
tree[cur<<].add+=tree[cur].add;
tree[cur<<|].add+=tree[cur].add;
tree[cur].add=;
}
}
void build(ll l,ll r,ll cur)
{
tree[cur].l=l,tree[cur].r=r;
tree[cur].val=tree[cur].add=;
if(l==r){
tree[cur].val=ary[l];
return;
}
ll mid=(l+r)/;
build(l,mid,cur<<);
build(mid+,r,cur<<|);
pushup(cur);
}
ll query(ll l,ll r,ll cur)
{
ll L=tree[cur].l,R=tree[cur].r;
if(l<=L&&r>=R) return tree[cur].val;
down(cur,R-L+);
ll mid=(L+R)/;
ll ans=;
if(l<=mid) ans+=query(l,r,cur<<);
if(r>mid) ans+=query(l,r,cur<<|);
return ans;
}
void update(ll l,ll r,ll key,ll cur)
{
ll L=tree[cur].l,R=tree[cur].r;
if(l<=L&&r>=R){
tree[cur].val+=(R-L+)*key;
tree[cur].add+=key;
return;
}
down(cur,R-L+);
ll mid=(L+R)/;
if(l<=mid) update(l,r,key,cur<<);
if(r>mid) update(l,r,key,cur<<|);
pushup(cur);
}
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
for(ll i=;i<=n;i++)
scanf("%lld",&ary[i]);
build(,n,);
while(m--){
char tmp;
cin>>tmp;
if(tmp=='Q'){
ll l,r;
scanf("%lld%lld",&l,&r);
ll ans=query(l,r,);
printf("%lld\n",ans);
}
else{
ll l,r,key;
scanf("%lld%lld%lld",&l,&r,&key);
update(l,r,key,);
}
}
return ;
}
线段树 区间查询区间修改 poj 3468的更多相关文章
- HZAU 1207 Candies(线段树区间查询 区间修改)
[题目链接]http://acm.hzau.edu.cn/problem.php?id=1207 [题意]给你一个字符串,然后两种操作:1,将区间L,R更新为A或者B,2,询问区间L,R最长的连续的B ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- 线段树(成段更新) POJ 3468 A Simple Problem with Integers
题目传送门 /* 线段树-成段更新:裸题,成段增减,区间求和 注意:开long long:) */ #include <cstdio> #include <iostream> ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
- UVa 11992 Fast Matrix Operations (线段树,区间修改)
题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...
随机推荐
- FatMouse and Cheese HDU - 1078 dp
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int n,k ...
- SSM项目集成Lucene+IKAnalyzer在Junit单元测试中执行异常
个人博客 地址:http://www.wenhaofan.com/article/20181108132519 问题描述 在项目运行以及main方法中能够正常运行,但是使用junit单元测试时却报如下 ...
- Git下载GitHub仓库里的某一个文件夹或某一个文件
从Github上下载github上的整个项目,可以用下面指令: git clone https://github.com/XXX/xxxxx.git 其中:XXX是用户在Github上的用户名 xxx ...
- mysql逻辑备份与还原工具mysqldump
(一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所 ...
- SpringMVC处理中文乱码
SpringMVC自带过滤器 添加至web.xml文件 <filter> <filter-name>encoding</filter-name> <filte ...
- 全排列(dfs-有重复数字)
给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列.例如:S = "1312", 输出为: 1123 1132 1213 1231 131 ...
- 巨杉Tech | SparkSQL+SequoiaDB 性能调优策略
当今时代,企业数据越发膨胀.数据是企业的价值,但数据处理也是一种技术挑战.在海量数据处理的场景,即使单机计算能力再强,也无法满足日益增长的数据处理需求.所以,分布式才是解决该类问题的根本解决方案.而在 ...
- 多源最短路(floyd算法)
Floyd算法: 如何简单方便的求出图中任意两点的最短路径 Floyd-Warshall算法(O(n)比较适用于边较多的稠密图(Dense Graph)) Floyd算法用来找出每对顶点之间的最短距离 ...
- Spring Boot Post、Get接收Map
原文地址:https://blog.csdn.net/java0311/article/details/81671754 Post: @RequestBody Map param Get: @Req ...
- 在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB
基于版本:19c (12.2.0.3) AskScuti 创建方法:从零开始创建一个PDB(从PDB$SEED创建新的PDB) 对应路径:Creating a PDB --> Creating ...