kb-07线段树-03--区间修改查询--lazy思想
/*
区间修改,区间查询和;
第一次使用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思想的更多相关文章
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- hihoCode 1078 : 线段树的区间修改
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
#1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...
- HDU1698 线段树入门之区间修改/查询(lazy标记法)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- 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 ...
- HDU 1698 【线段树,区间修改 + 维护区间和】
题目链接 HDU 1698 Problem Description: In the game of DotA, Pudge’s meat hook is actually the most horri ...
随机推荐
- python爬虫之路——构造URL集
例某网站的URL集是这样的 https://www.555zw.com/book/40/40934/10334793.html https://www.555zw.com/book/40/40934/ ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- mvc的help和functions语法
@helper show(int num ) { ) { @:存在 } else { @:不存在 } } @functions { /// <summary> /// 方法必须要求为静态 ...
- CF Gym 100637J Superfactorial numeral system (构造)
题意:给一个式子,ak,k>2时,0<=ak<k:ai都是整数,给你p,q让你求一组ak. 题解:构造,每次除掉q取整得到ai,然后减一减 #include<cstdio> ...
- python实现单链表翻转
题目描述: 翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑 ...
- lca(最近公共祖先(离线))
转自大佬博客 : https://www.cnblogs.com/JVxie/p/4854719.html LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先 ...
- java中插入myslq的datetime类型的
java.util.Date d = new java.util.Date(); Timestamp tt=new Timestamp(d.getTime()); ps.setTimestamp(4, ...
- JS - encodeURI与encodeURIComponent的区别
encodeURI(String)主要用于整个URI(例如,http://www.jxbh.cn/illegal value.htm),而encodeURIComponent(String)主要用于对 ...
- 【python】python安装和运行报错汇总
本文主要用于汇总在python开发过程中遇到的各种环境.工具相关问题,便于后续遇到相关问题,及时搞定,持续更新. 一.安装pip失败,具体如下: 错误信息: python setup.py insta ...
- vue_music:封装scroll.vue组件
在项目中经常用到滚动,结合Better-scroll封装了sroll.vue组件参考链接:https://ustbhuangyi.github.io...http://www.imooc.com/ar ...