题目大意

给定一个序列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(线段树的成段更新)的更多相关文章

  1. hdu 1698 Just a Hook(线段树之 成段更新)

    Just a Hook                                                                             Time Limit: ...

  2. 线段树之成段更新( 需要用到延迟标记,简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候)

    HDU  1698 链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直 ...

  3. POJ 2777 Count Color(线段树之成段更新)

    Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33311 Accepted: 10058 Descrip ...

  4. POJ3648 A Simple Problem with Integers(线段树之成段更新。入门题)

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

  5. hdu 4614 Vases and Flowers(线段树:成段更新)

    线段树裸题.自己写复杂了,准确说是没想清楚就敲了. 先是建点为已插花之和,其实和未插花是一个道理,可是开始是小绕,后来滚雪球了,跪了. 重新建图,分解询问1为:找出真正插画的开始点和终止点,做成段更新 ...

  6. poj2528 Mayor's posters(线段树之成段更新)

    Mayor's posters Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 37346Accepted: 10864 Descr ...

  7. POJ 3468 A Simple Problem with Integers //线段树的成段更新

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

  8. 线段树(成段更新,区间求和lazy操作 )

    hdu1556 Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. hdu1698 Just a Hook 线段树:成段替换,总区间求和

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...

随机推荐

  1. check whether the crystal report runtime is exists 检查crystalreport运行时是否存在

    1. Try Dim rptDoc As New CrystalDecisions.CrystalReports.Engine.ReportClass() Dim rptView As New Cry ...

  2. user is not mapped

    用Hibernate实现一个用户的登陆过程,当我在JSP的登陆页面输入姓名和密码,点登陆后,显示登陆失败页,在服务器里显示如下的错误信息:  org.hibernate.hql.ast.QuerySy ...

  3. Mongodb FAQ fundamentals(基础篇)

    Mongodb FAQ(基础篇),是官方文档的翻译.如有翻译不到之处,还请谅解. 1.Mongdb是什么数据库? mongodb是一个面向文档(document)的数据库,既不支持表连接,也不支持事务 ...

  4. spring的主要特性

    一.简化java开发.为了降低java开发的复杂性,Spring采取了以下4种关键策略: 1.基于POJO的轻量级和最小侵入性编程. 2.通过依赖注入和面向接口实现松耦合. 3.基于切面和惯例进行声式 ...

  5. PHP mysql_real_escape_string() 函数

    定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功, ...

  6. Asp.net MVC 视图之公用代码

    一.公共模板 转自:http://www.cnblogs.com/kissdodog/archive/2013/01/07/2848881.html 1.@RenderBody() 在网站公用部分通过 ...

  7. Hibernate 一对多自身双向关联关系 用于类别表的实现

    分类:一对多自身双向关联关系 Java持久化类: package com.hyy.hibernate.one_to_many.domain; import java.util.HashSet; imp ...

  8. MongoDB实战指南(四):MongoDB的Journaling日志功能

    mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据库在服务器上的启动信息.慢查询记录.数据库异常信息.客户端与数据库服务器连接 ...

  9. Arrays.sort 与 Collections.sort

    代码如下: package com.wangzhu.arrays; import java.util.Arrays; import java.util.Collections; public clas ...

  10. NGUI 的使用教程与实例(入门)(1 )

    NGUI教程:步骤1-Scene 1.创建一个新的场景(New Scene).2.选择并删除场景里的MainCamera.3.在NGUI菜单下选择Create a New UI,会打开UI创建向导. ...