/*
区间修改,区间查询和;
第一次使用lazy思想;
poj3468
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
typedef struct
{
int l,r;
ll add;
ll value;
}V; int n,m,a[]={}; V tr[]={};
void Pushup(int rt)
{
tr[rt].value=tr[rt<<].value+tr[(rt<<)|].value;
}
void Pushdown(int rt,int m)
{
if(tr[rt].add)
{
tr[rt<<].add+=tr[rt].add;
tr[(rt<<)|].add+=tr[rt].add;
tr[rt<<].value+=tr[rt].add*(m-(m>>));
tr[(rt<<)|].value+=tr[rt].add*(m>>);
tr[rt].add=;
}
}
void build(int i,int l,int r)
{
tr[i].l=l;
tr[i].r=r;
tr[i].add=;
if(l==r)
{
tr[i].value=a[l];
return ;
}
int mid=(l+r)/;
build(i<<,l,mid);
build((i<<)|,mid+,r);
Pushup(i);
}
void Update(int i,int l,int r,int x)
{
if(tr[i].l==l&&tr[i].r==r)
{
tr[i].add+=x;
tr[i].value+=(ll)x*(r-l+);
return ;
}
if(tr[i].l==tr[i].r)
return ;
Pushdown(i,tr[i].r-tr[i].l+);
int t=i<<;
if(l<=tr[t].r)
{
if(r<=tr[t].r)
Update(t,l,r,x);
else
Update(t,l,tr[t].r,x);
}
t+=;
if(r>=tr[t].l)
{
if(l>=tr[t].l)
Update(t,l,r,x);
else
Update(t,tr[t].l,r,x);
}
Pushup(i);
}
ll Query(int i,int l,int r)
{
if(tr[i].l==l&&tr[i].r==r)
{
return tr[i].value;
}
Pushdown(i,tr[i].r-tr[i].l+);
ll ans=;
i=i<<;
if(l<=tr[i].r)
{
if(r<=tr[i].r)
ans+=Query(i,l,r);
else
ans+=Query(i,l,tr[i].r);
}
i+=;
if(r>=tr[i].l)
{
if(l>=tr[i].l)
ans+=Query(i,l,r);
else
ans+=Query(i,tr[i].l,r);
}
return ans;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,,sizeof(a));
memset(tr,,sizeof(tr));
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
build(,,n);
for(int i=;i<m;i++)
{
char s[];
int x1,x2,x3;
scanf("%s",s);
if(s[]=='C')
{
scanf("%d%d%d",&x1,&x2,&x3);
Update(,x1,x2,x3);
}
else
{
scanf("%d%d",&x1,&x2);
printf("%I64d\n",Query(,x1,x2));
}
}
}
return ;
}

kb-07线段树-03--区间修改查询--lazy思想的更多相关文章

  1. hiho一下20周 线段树的区间修改

    线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...

  2. poj 3468:A Simple Problem with Integers(线段树,区间修改求和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 58269   ...

  3. hihoCode 1078 : 线段树的区间修改

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  4. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  5. HDU1698 线段树入门之区间修改/查询(lazy标记法)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)

    补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...

  7. hiho一下21周 线段树的区间修改 离散化

    离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...

  8. UVa 11992 Fast Matrix Operations (线段树,区间修改)

    题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...

  9. HDU 1698 【线段树,区间修改 + 维护区间和】

    题目链接 HDU 1698 Problem Description: In the game of DotA, Pudge’s meat hook is actually the most horri ...

随机推荐

  1. Integer的一个小问题

    看面试题的时候看到这道题: public class Demo { public static void main(String[] args) { Integer i1 = 128; Integer ...

  2. Array - RemoveDuplicatesfromSortedArray

    /** * 无额外空间,只要前n个是不重复的就行,不需要修改后面的数字 * @param nums 已排序的数组 * @return 去除重复数字后的长度 */ public int removeDu ...

  3. DaemonSet 典型应用场景【转】

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

  4. Meaningful Mean

    You are given an integer sequence of length N, a= {a1,a2,…,aN}, and an integer K.a has N(N+1)⁄2 non- ...

  5. CMDB API验证

    CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...

  6. 使用Python生成ASCII字符画

    使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...

  7. 动态代理--Cglib

    JDK 的Proxy 实现,需要代理对象实现接口: package com.utils; import java.lang.reflect.InvocationHandler; import java ...

  8. Python 消息框的处理

    在实际系统中,在完成某些操作时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框. 1.警告消息框 ...

  9. 【Python学习之四】递归与尾递归

    看完廖雪峰老师的教程,感觉尾递归函数是一个相对难点.于是复习一下,思考了一下,发表一些见解,记录一下. 1.递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数 ...

  10. pandas时间数据的集成处理

    工作中遇到的一个问题: 统计各地区新能源汽车的充电时长 数据来源是北理新源的单日全球的运行数据. 这里仅统计北上广重庆四个地区的 数据处理的代码就省略了 需要整理好的是4个dataframe(数据已保 ...