题意:

给你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 区间修改+区间查询的更多相关文章

  1. POJ 3468 A Simple Problem with Integers (区间更新+区间查询)

    题目链接 Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operation ...

  2. poj3468 A Simple Problem with Integers(zkw区间修改模板)

    此题是一道线段树的裸题,这里只是为了保存我的zkw线段树模板 #include <cstdio> #include <cstring> #include <iostrea ...

  3. A Simple Problem with Integers 循环节 修改 平方 找规律 线段树

    A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...

  4. POJ_3468 A Simple Problem with Integers 【线段树区间查询+修改】

    一.题目 POJ3468 二.分析 裸的线段树区间查询+修改. 三.AC代码 #include <cstdio> #include <iostream> #include &l ...

  5. POJ3468A Simple Problem with Integers(区间加数求和 + 线段树)

    题目链接 题意:两种操作:一是指定区间的数全都加上一个数,二是统计指定区间的和 参考斌神的代码 #include <iostream> #include <cstring> # ...

  6. (线段树模板)A Simple Problem with Integers --POJ--3468

    链接: http://poj.org/problem?id=3468 代码: #include<stdio.h> #include<algorithm> #include< ...

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

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

  8. A Simple Problem with Integers 多树状数组分割,区间修改,单点求职。 hdu 4267

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  9. 线段树---poj3468 A Simple Problem with Integers:成段增减:区间求和

    poj3468 A Simple Problem with Integers 题意:O(-1) 思路:O(-1) 线段树功能:update:成段增减 query:区间求和 Sample Input 1 ...

  10. poj3468 A Simple Problem with Integers (线段树区间最大值)

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

随机推荐

  1. css——伪类选择器

    <body> <div class="box">   <p>0</p>         <div>1</div&g ...

  2. UE4高级运动系统(Advanced Locomotion System V3)插件分析

    Advanced Locomotion System V3是虚幻商城的一款第三方插件.它相比UE4的基础走跑跳表现,实现了更多动作游戏里常用的运动特性,虽然价格定价不菲,依然备受关注.笔者试用了这款插 ...

  3. 解决 IDEA 下 struts.xml 中 extends="struts-default" 报红的问题

    现象 在IDEA中配置struts.xml时 extends="struts-default" 报红,配置拦截器时属性无预选项提示,也爆红. struts.xml本身的配置并没有错 ...

  4. 在centos 7中安装phpmyadmin

    安装phpmyadmin数据库管理系统 //1.下载phpmyadmin包wget https://files.phpmyadmin.net/phpMyAdmin/4.7.0/phpMyAdmin-4 ...

  5. twisted reactor calllater实现

    twisted reactor calllater实现 1.      calllater实现代码 测试源码: from twisted.internet import reactor from tw ...

  6. Java中几种office文档转pdf的方式

    最近公司要做office的文档,搜集了几种office文档转pdf的方式,简单的做下总结 我主要尝试了三种方式:openoffice,aspose,jacob 对他们进行了大文件,小文件,在linux ...

  7. [IDEA] Idea复制文件到项目一直updating indices的问题

    通常我们在开发JavaWeb项目的时候,都需要先将网页写好,在进行复制到web目录下,如果里面包含了很多的资源文件,就会造成一直updating indices. 方法一: 这是因为项目需要对web目 ...

  8. Dart语言学习(十一) Dart异常处理

    异常是表示发生了意外的错误,如果没有捕获异常,引发异常的隔离程序将被挂起,并且程序将被终止: Dart代码可以抛出并捕获异常,但与java相反,Dart的所有异常都是未检查的异常,方法不声明它们可能抛 ...

  9. 【网摘】将图片地址直接 转为 base64

    $(function() { function getBase64Image(img) { //转换为 base64 地址 var canvas = document.createElement(&q ...

  10. Redis学习笔记(一)配置文件参数说明

    1.Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2.当redis以守护进程方式运行时,Redis默认会把pid写入/var/run/ ...