A Simple Problem with Integers-POJ3468 区间修改+区间查询
题意:
给你n个数和2个操作,C操作是将一个区间内的每个数都加上k,Q操作是询问一个区间的和
链接:http://poj.org/problem?id=3468
思路:
线段树区间修改+区间查询
代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int MAXN=2e5+;
typedef long long ll;
ll tree[MAXN<<];
ll lazy[MAXN<<]; //lazy数组为区间修改时引进的一个标记数组
void push_up(ll node)
{
tree[node]=tree[node<<]+tree[node<<|];
}
void build(ll node,ll l, ll r)
{
if(l==r)
{
scanf("%lld",&tree[node]);
return ;
}
ll mid=(l+r)>>;
build(node<<,l,mid);
build(node<<|,mid+,r);
push_up(node);
} /*
push_down函数用来下传lazy标记,左右儿子的lazy等于父亲节点的lazy,
左儿子的区间和改变的数值为左儿子的区间长度*lazy[node]的值,右儿子同理,
下传结束后将父亲节点的lazy[node]变为0.
*/ void push_down(int node,int l,int r,int mid)
{ lazy[node<<]+=lazy[node];
lazy[node<<|]+=lazy[node];
tree[node<<]+=(mid-l+)*lazy[node];
tree[node<<|]+=(r-mid)*lazy[node];
lazy[node]=; }
void update(int node,int l,int r,int x,int y,int k) //区间修改函数
{
if(x<=l&&y>=r) //如果l,r在范围内,该区间的和直接增加(r-l+1)*k,打上lazy标记
{
tree[node]+=(r-l+)*k;
lazy[node]+=k;
return;
}
ll mid=(l+r)>>;
if(lazy[node]) //如果有lazy标记,则下传
push_down(node,l,r,mid);
if(x<=mid)
update(node<<,l,mid,x,y,k);
if(y>mid)
update(node<<|,mid+,r,x,y,k);
push_up(node); //修改他父亲区间的和
}
ll query(ll node,ll l,ll r,ll x,ll y)
{
if(x<=l&&y>=r)
return tree[node];
ll mid=(l+r)>>;
if(lazy[node])push_down(node,l,r,mid);
ll ans=;
if(x<=mid)
ans+=query(node<<,l,mid,x,y);
if(y>mid)
ans+=query(node<<|,mid+,r,x,y);
return ans;
}
int main()
{
ll n,q;scanf("%lld%lld",&n,&q);
build(,,n);
for(int i=;i<=q;i++)
{
char str[];
scanf("%s",str);
ll x,y;
if(str[]=='Q')
{
scanf("%lld%lld",&x,&y);
printf("%lld\n",query(,,n,x,y));
}
else
{
ll k;
scanf("%lld%lld%lld",&x,&y,&k);
update(,,n,x,y,k);
}
}
return ;
}
A Simple Problem with Integers-POJ3468 区间修改+区间查询的更多相关文章
- POJ 3468 A Simple Problem with Integers (区间更新+区间查询)
题目链接 Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operation ...
- poj3468 A Simple Problem with Integers(zkw区间修改模板)
此题是一道线段树的裸题,这里只是为了保存我的zkw线段树模板 #include <cstdio> #include <cstring> #include <iostrea ...
- A Simple Problem with Integers 循环节 修改 平方 找规律 线段树
A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...
- POJ_3468 A Simple Problem with Integers 【线段树区间查询+修改】
一.题目 POJ3468 二.分析 裸的线段树区间查询+修改. 三.AC代码 #include <cstdio> #include <iostream> #include &l ...
- POJ3468A Simple Problem with Integers(区间加数求和 + 线段树)
题目链接 题意:两种操作:一是指定区间的数全都加上一个数,二是统计指定区间的和 参考斌神的代码 #include <iostream> #include <cstring> # ...
- (线段树模板)A Simple Problem with Integers --POJ--3468
链接: http://poj.org/problem?id=3468 代码: #include<stdio.h> #include<algorithm> #include< ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- A Simple Problem with Integers 多树状数组分割,区间修改,单点求职。 hdu 4267
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 线段树---poj3468 A Simple Problem with Integers:成段增减:区间求和
poj3468 A Simple Problem with Integers 题意:O(-1) 思路:O(-1) 线段树功能:update:成段增减 query:区间求和 Sample Input 1 ...
- poj3468 A Simple Problem with Integers (线段树区间最大值)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92127 ...
随机推荐
- win server 挂载
新建服务器角色,选择[NFS服务器]. mount -o nolock \\x.x.x.x.x.x\! z:/*链接到*/
- 【译】高级T-SQL进阶系列 (三)【上篇】:理解公共表表达式(CTEs)
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 伴随着SQL SERVER 2005的首次展示,微软介绍了一种新的被称为“公共表 表达式”(CTE)的查询结构. ...
- MySQL忘记密码(终极解决方法,亲测有效,windows版本)
1.进入mysql的bin目录 2.net stop mysql 3.mysqld --skip-grant-tables 输入 mysqld --skip-grant-tables 回车. (--s ...
- 健壮的I/O(RIO)
在上篇Unix系统级I/O中,我们介绍了有关在Unix环境下读取和写入文件的函数read和write,也提到了标准I/O在进行网络I/O时的局限性.但是在某些地方,直接使用read和write往往会出 ...
- winform Anchor和Dock属性
在设计窗体时,这两个属性特别有用,如果用户认为改变窗口的大小并不容易,应确保窗口看起来不显得很乱,并编写许多代码行来达到这个目的,许多程序解决这个问题是地,都是禁止给窗口重新设置大小,这显然是解决问题 ...
- RedisTemplate 获取过期时间的问题
RedisTemplate redisTemplate; Long seconds = redisTemplate.opsForValue().getOperations().getExpire(&q ...
- Vue ElementUI Tree组件 回显问题(设置选择父级时会全选所有的子级,有此业务场景是不适合的)
业务场景下有这样的问题 业务需求需要保存前端 半选节点 解决方案 let checked = this.$refs.menuTree.getCheckedKeys(); //此方法获取半选节点 let ...
- 探索 Python + HyperLPR 进行车牌识别
概要 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...
- Q - Saruman's Army POJ - 3069
Saruman the White must lead his army along a straight path from Isengard to Helm's Deep. To keep tra ...
- formValidation单个输入框值改变时校验
$("#tv_form").data("formValidation").updateStatus("pay.vcAmount", &qu ...