http://poj.org/problem?id=3468

题目大意:

给你N个数还有Q组操作(1 ≤ N,Q ≤ 100000)

操作分为两种,Q A B 表示输出[A,B]的和   C A B X表示把[A,B]的所有数加上X

思路:

线段树的区间修改。。。。。

昨天晚上改了老半天。

然后关机准备睡觉毕竟今天有实验。。去洗个头。。突然有灵感。。急急忙忙的开电脑改了就对了~哈哈哈

PS:POJ AC 100了~ 因为混迹各个OJ,SO才100

用位运算优化*2  1600+MS,不用2200MS。。。差了挺多

顺便测试了下很久以前想的k<<1和k+k的效率,果然是k<<1的效率高,k+k慢了30多MS

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=100000+10;
typedef long long LL;
LL sum[MAXN<<2],add[MAXN<<2];
int a[MAXN];
void build(LL k,LL L,LL R)
{
if(L==R) sum[k]=a[L];
else
{
LL m=(L+R)>>1;
build(k<<1,L,m);
build((k<<1)+1,m+1,R);
sum[k]=sum[k<<1]+sum[(k<<1)+1];
}
} void update(LL k,LL L,LL R,LL a,LL b,LL v)
{
sum[k]+=(min(R,b)-max(a,L)+1)*v;
if(a<=L && R<=b) add[k]+=v;
else
{
LL m=(L+R)>>1;
if(a<=m) update(k<<1,L,m,a,b,v);
if(m<b) update((k<<1)+1,m+1,R,a,b,v);
}
}
LL ans;
void query(LL k,LL L,LL R,LL a,LL b,LL addv)
{
if(a<=L && R<=b) ans+=sum[k]+(R-L+1)*addv;
else
{
LL m=(L+R)>>1;
if(a<=m) query(k<<1,L,m,a,b,addv+add[k]);
if(m<b) query((k<<1)+1,m+1,R,a,b,addv+add[k]); }
} int main()
{
// freopen("e:\\input.txt","r",stdin);
int n,q;
while(~scanf("%d%d",&n,&q))
{
memset(add,0,sizeof(add));
memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++)
scanf("%d",&a[i]); build(1,1,n); for(int i=0;i<q;i++)
{
char cmd[5];
int a,b,v;
scanf("%s",cmd);
if(cmd[0]=='Q')
{
ans=0;
scanf("%d%d",&a,&b);
query(1,1,n,a,b,0);
printf("%lld\n",ans);
}
else
{
scanf("%d%d%d",&a,&b,&v);
update(1,1,n,a,b,v);
}
}
}
return 0;
}

POJ 3468 A Simple Problem with Integers 线段树区间修改的更多相关文章

  1. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  2. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  3. [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]

    A Simple Problem with Integers   Description You have N integers, A1, A2, ... , AN. You need to deal ...

  4. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

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

  5. poj 3468 A Simple Problem with Integers 线段树区间更新

    id=3468">点击打开链接题目链接 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072 ...

  6. POJ 3468 A Simple Problem with Integers(线段树,区间更新,区间求和)

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

  7. (简单) POJ 3468 A Simple Problem with Integers , 线段树+区间更新。

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  8. POJ 3468 A Simple Problem with Integers(线段树区间更新)

    题目地址:POJ 3468 打了个篮球回来果然神经有点冲动. . 无脑的狂交了8次WA..竟然是更新的时候把r-l写成了l-r... 这题就是区间更新裸题. 区间更新就是加一个lazy标记,延迟标记, ...

  9. POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)

    #include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...

随机推荐

  1. 3D图形处理库

    转自 3D图形处理库 高性能软件光栅化渲染器 OpenSWR OpenSWR —— 用于OpenGL的高性能,高度可扩展的软件光栅化渲染器 OpenSWR的目的是提供一个高性能,高度可扩展的OpenG ...

  2. vector与deque的区别

    最重要的区别,是内部实现上.deque是分段存储的. 都是支持随机存取. http://www.cnblogs.com/zhuyf87/archive/2012/12/09/2809896.html ...

  3. Cocos2d-x开发的Android应用怎么加入插屏广告

    Cocos2d-x系统开发游戏已经变得比較流行,但是用这个开发的游戏.想要加入广告就不是那么理想了.尤其是插屏广告.由于插屏广告通常是要在暂停或者结束游戏的时候展示才比較的合理.但是Cocos2d-x ...

  4. PMP杂谈--制约因素与如果条件

     制约因素和如果条件都是项目范围说明书的内容.它们是项目范围基准的一部分,是定义活动.估算活动持续时间.制定进度计划.估算成本.制定预算.识别风险和规划採购等多个过程的输入. 差别:制约因素是确定 ...

  5. cgroups

    CGROUPS官方解析,用户空间怎样监控 http://blog.chinaunix.net/uid-16763274-id-2103750.html cgroups概念 fr=aladdin&quo ...

  6. JavaFX 一 出生新手村(阅读小规则)

    我就不讲IDE怎么装的,网上有的是,我仅仅是说说我学习过程中遇到的,该注意的东西 1.JavaFX刚開始出是基于脚本script开发的语言,所以网上会有流传比較多关于script的JavaFX,对于被 ...

  7. Objective-C_类的扩展

    一Category的定义和使用 二Extension的定义和使用 三Protocol的定义和使用 delegate的使用 一.Category的定义和使用 Category,分类或类目.主要作用是为没 ...

  8. Mysql数据库调优和性能优化

    1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常 ...

  9. VMwarep挂载镜像及配置本地Yum源

    1.挂载镜像: *. 通过mount命令         linux mount挂载设备(u盘,光盘,iso等 )使用说明 *.  通过VMware的控制页面手工挂载 1.1    打开Vmware软 ...

  10. 信号 signal sigaction补充

    目前linux中的signal()是通过sigation()函数实现的. 由signal()安装的实时信号支持排队,同样不会丢失. 先看signal 和 sigaction 的区别: 关键是 stru ...