Codeforces295A - Greg and Array(线段树的成段更新)
题目大意
给定一个序列a[1],a[2]……a[n]
接下来给出m种操作,每种操作是以下形式的:
l r d
表示把区间[l,r]内的每一个数都加上一个值d
之后有k个操作,每个操作是以下形式的:
x y
表示把第x种操作一直到第y种操作都执行一遍
最终输出在k个操作结束之后的序列
题目大意
就是线段树的成段更新嘛~~~先用线段树统计每种操作的次数,然后再执行m次成段更新,最后查询到底的查询即可~~~树状数组也可搞,似乎写起来还更简单些~~~还有一个更犀利的O(n)的算法,不过我暂时还没弄懂~~~这里是某大神的题解
代码:
在update和query的时候穿参数传错了,把m和n搞混了,提交上去RE了,搞好久才找出错误。。。。o(╯□╰)o
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 111111
#define lson l,m,s<<1
#define rson m+1,r,s<<1|1
#define x first
#define y second
typedef long long LL;
pair<pair<int,int>,LL> op[MAXN];
LL a[MAXN],addv[MAXN<<2],sumv[MAXN<<2];
void PushDown(int s,int opr)
{
if(opr==1)
{
if(addv[s])
{
addv[s<<1]+=addv[s];
addv[s<<1|1]+=addv[s];
addv[s]=0;
}
}
else
{
if(sumv[s])
{
sumv[s<<1]+=sumv[s];
sumv[s<<1|1]+=sumv[s];
sumv[s]=0;
}
}
}
void update(int opr,int ql,int qr,LL d,int l,int r,int s)
{
if(ql<=l&&r<=qr)
{
if(opr==1)addv[s]+=d;
else
sumv[s]+=d;
return;
}
PushDown(s,opr);
int m=(l+r)>>1;
if(ql<=m) update(opr,ql,qr,d,lson);
if(qr>m) update(opr,ql,qr,d,rson);
}
LL query(int opr,int p,int l,int r,int s)
{
if(l==r)
{
if(opr==1)
return addv[s];
else
return sumv[s];
}
PushDown(s,opr);
int m=(l+r)>>1;
LL ans=0;
if(p<=m) ans=query(opr,p,lson);
else
ans=query(opr,p,rson);
return ans;
}
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++) scanf("%d%d%d",&op[i].x.x,&op[i].x.y,&op[i].y);
while(k--)
{
int xx,yy;
scanf("%d%d",&xx,&yy);
update(2,xx,yy,1,1,m,1);
}
for(int i=1;i<=m;i++)
op[i].y*=query(2,i,1,m,1);
for(int i=1;i<=m;i++)
update(1,op[i].x.x,op[i].x.y,op[i].y,1,n,1);
for(int i=1;i<=n;i++)
printf("%I64d ",a[i]+query(1,i,1,n,1));
printf("\n");
return 0;
}
Codeforces295A - Greg and Array(线段树的成段更新)的更多相关文章
- hdu 1698 Just a Hook(线段树之 成段更新)
Just a Hook Time Limit: ...
- 线段树之成段更新( 需要用到延迟标记,简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候)
HDU 1698 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直 ...
- POJ 2777 Count Color(线段树之成段更新)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33311 Accepted: 10058 Descrip ...
- POJ3648 A Simple Problem with Integers(线段树之成段更新。入门题)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 53169 Acc ...
- hdu 4614 Vases and Flowers(线段树:成段更新)
线段树裸题.自己写复杂了,准确说是没想清楚就敲了. 先是建点为已插花之和,其实和未插花是一个道理,可是开始是小绕,后来滚雪球了,跪了. 重新建图,分解询问1为:找出真正插画的开始点和终止点,做成段更新 ...
- poj2528 Mayor's posters(线段树之成段更新)
Mayor's posters Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 37346Accepted: 10864 Descr ...
- POJ 3468 A Simple Problem with Integers //线段树的成段更新
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 59046 ...
- 线段树(成段更新,区间求和lazy操作 )
hdu1556 Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- hdu1698 Just a Hook 线段树:成段替换,总区间求和
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...
随机推荐
- JS-------DOM0级事件处理和DOM2级事件处理-------简单记法
0级DOM 分为2个:一是在标签内写onclick事件 二是在JS写onlicke=function(){}函数 1) <input id="myButton" type= ...
- Chart Style
How to add label to column chart http://blogs.msdn.com/b/delay/archive/2009/07/27/simple-column-labe ...
- LCD显示方向
一.ILI9341内存到显示地址的映射 本文只讨论“正常显示”,不讨论“垂直滚动显示”模式. 可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到 ...
- SDC(5)–FPGA系统级同步输入的约束
此时计算最大/最小输入延时时,是不应该考虑FPGA本身的tSU/tH的,因为数据进来之后不一定马上送到DFF. 例如: 此时约束如下:
- posix和system v有什么区别/?
posix和system v有什么区别/?现在在应用时应用那一标准浮云484212 | 浏览 243 次 2014-11-06 10:362014-11-19 22:36 最佳答案们是有关信号量的两组 ...
- sort()排序
var ary = [8,9,10,3], compare = function(a,b){ return b.age-a.age; }, g = [ { name:"jim", ...
- PHP dirname() 函数
定义和用法 dirname() 函数返回路径中的目录部分. 语法 dirname(path) 参数 描述 path 必需.规定要检查的路径. 说明 path 参数是一个包含有指向一个文件的全路径的字符 ...
- AHB总线和APB总线
AHB主要用于高性能模块(如CPU.DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作:非三态的实现方式:支持突发传输:支持分段传输:支持多个主控制器:可配置 ...
- altium6.x中自动删除重复走线的位置
在protel 2004 DXP中,“自动删除走线”的位置就在"PCB Editor"的默认页面,非常好找. 但是升级到了altium 6.7,6.9之后,很多人就找不到这个了. ...
- 汉字与区位码互转(天天使用的String存储的是内码),几个常见汉字编码,附有读书笔记
汉=BABA(内码)=-A0A0=2626(区位码)字=D7D6(内码)=-A0A0=5554(区位码) 各种编码查询表:http://bm.kdd.cc/ “啊”字是GB2312之中的第一个汉字,会 ...