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 ...
随机推荐
- Codeforces 464E #265 (Div. 1) E. The Classic Problem 主席树+Hash
E. The Classic Problem http://codeforces.com/problemset/problem/464/E 题意:给你一张无向带权图,求S-T的最短路,并输出路径.边权 ...
- MovieReview—A dog's purpose(一只狗的使命)
Be Here Now A dog in the movie was reinc ...
- python_98_面向对象_学校
class School(object):#以后都加object(基类) def __init__(self, name, addr): self.name = name self.addr = ad ...
- x86,x64,i386,i686
x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...
- [转载]matlab图像处理为什么要归一化和如何归一化
matlab图像处理为什么要归一化和如何归一化,一.为什么归一化1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变 ...
- 【模板】树套树(线段树套Splay)
如题,这是一个模板... #include <algorithm> #include <iostream> #include <cstring> #include ...
- mysql 添加数据如果数据存在就更新ON DUPLICATE KEY UPDATE和REPLACE INTO
#下面建立game表,设置name值为唯一索引. CREATE TABLE `game` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar( ...
- nginx访问日志(access_log)
一.nginx访问日志介绍 nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module模块负责,对应的官方地址 ...
- 《Spring源码深度解析》第三章 默认标签的解析
上一章提到了,默认标签和自定义标签要分开解析.本章重点介绍默认标签的解析.在 DefaultBeanDefinitionDocumentReader 中: private void parseDefa ...
- python-闭包函数和装饰器
目录 闭包函数 什么是闭包? 两种为函数传参的方式 使用参数的形式 包给函数 闭包函数的应用 闭包的意义: 装饰器 无参装饰器 什么是装饰器 为什么要用装饰器 怎么用装饰器 完善装饰器 闭包函数 什么 ...