题意:给你n个数,有对区间的加减操作,问某个区间的和是多少。

思路:状压+线段树(要用lazy标记,否则会TLE)

//By SiriusRen
#include <cstdio>
#include <cstring>
#define N 100001
using namespace std;
long long tree[N*4],lazy[N*4];
int xx,yy,zz,n,q;
char jy;
void push_down(int pos,int num){
lazy[pos*2]+=lazy[pos],lazy[pos*2+1]+=lazy[pos];
tree[pos*2]+=(num-num/2)*lazy[pos],tree[pos*2+1]+=(num/2)*lazy[pos];
lazy[pos]=0;
}
void build(int l,int r,int pos){
if(l==r){scanf("%lld",&tree[pos]);return;}
int mid=(l+r)/2;
build(l,mid,pos*2),build(mid+1,r,pos*2+1);
tree[pos]=tree[pos*2]+tree[pos*2+1];
}
void add(int l,int r,int pos){
if(l>=xx&&r<=yy){lazy[pos]+=zz;tree[pos]+=(long long)(r-l+1)*zz;return;}
if(lazy[pos])push_down(pos,r-l+1);
int mid=(l+r)/2;
if(mid>=xx)add(l,mid,pos*2);
if(mid<yy)add(mid+1,r,pos*2+1);
tree[pos]=tree[pos*2]+tree[pos*2+1];
}
long long query(int l,int r,int pos){
if(l>=xx&&r<=yy)return tree[pos];
if(lazy[pos])push_down(pos,r-l+1);
int mid=(l+r)/2;
if(mid<xx)return query(mid+1,r,pos*2+1);
else if(mid>=yy)return query(l,mid,pos*2);
else return query(l,mid,pos*2)+query(mid+1,r,pos*2+1);
}
int main(){
scanf("%d%d",&n,&q);
build(1,n,1);
while(q--){
scanf("\n%c%d%d",&jy,&xx,&yy);
if(jy=='C')scanf("%d",&zz),add(1,n,1);
else printf("%lld\n",query(1,n,1));
}
}

最新文章

  1. c#初学-多线程中lock用法的经典实例
  2. 用PhpStorm IDE创建GG App Engine PHP应用教程
  3. php图片处理函数自定义画图和引入图片
  4. 给jdk写注释系列之jdk1.6容器(8)-TreeSet&amp;NavigableMap&amp;NavigableSet源码解析
  5. SGU 158.Commuter Train
  6. java_method_Log输出日志的方法
  7. Linux系统编程(6)——文件系统
  8. [Android] 停止、恢复 背影音乐的播放
  9. java 读取excel 将数据插入到数据库
  10. Akka(16): 持久化模式:PersistentFSM-可以自动修复的状态机器
  11. IEEE Trans 2008 Gradient Pursuits论文学习
  12. object的wait()、notify()、notifyAll()、方法和Condition的await()、signal()方法
  13. hanjiaqi
  14. 查看内置命令和非内置命令帮助的几种方法(man、help、info)
  15. oracle大数据量更新引发的死锁问题解决方法及oracle分区和存储过程的思考
  16. 变相实现textarea文本域
  17. Struts2第三天
  18. Visual Studio 2013安装Update 3启动crash的解决方法
  19. 16、Docker的网络-host和none
  20. 16bit C &amp; ASM 如何混合编译?

热门文章

  1. 表单enctype属性传值问题
  2. mac上的svn命令
  3. random随机库
  4. 这书真的不错--Spring MVC Beginner&#39;s Guide
  5. [bzoj2599][IOI2011]Race_树上点分治
  6. 基于zookeeper和强一致性复制实现MySQL分布式数据库集群
  7. 实战体验几种MySQLCluster方案
  8. loosejar原理简要分析
  9. Swoole源代码学习记录(十二)——ReactorThread模块
  10. Python内置的字符串处理函数