题意:给你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));
}
}

POJ 3468 线段树+状压的更多相关文章

  1. POJ:2777-Count Color(线段树+状压)

    Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program d ...

  2. poj 3468(线段树)

    http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...

  3. hdu 1698+poj 3468 (线段树 区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...

  4. hdu 5023 线段树+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...

  5. Bzoj 3813 奇数国 题解 数论+线段树+状压

    3813: 奇数国 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 748  Solved: 425[Submit][Status][Discuss] ...

  6. POJ 3468(树状数组的威力)

    之前说过这是线段树的裸题,但是当看了http://kenby.iteye.com/blog/962159 这篇题解后我简直震惊了,竟然能如此巧妙地转化为用树状数组来处理,附上部分截图(最好还是进入原网 ...

  7. poj2777Count Color——线段树+状压

    题目:http://poj.org/problem?id=2777 状压每个颜色的选择情况,取答案时 | 一番: 注意题目中的区间端点可能大小相反,在读入时换一下位置: 注意pushdown()中要l ...

  8. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  9. poj 3468 线段树区间更新/查询

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

随机推荐

  1. 六、Scrapy中Download Middleware的用法

    本文转载自: https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/downloader-middleware.html https://doc. ...

  2. VMware Workstation 15 安装教程

    注:操作系统必须是64位    软件:360软件管家获取 1.运行下载完成的Vmware Workstation虚拟机软件包. 虚拟机软件的安装向导初始界面 2.在虚拟机软件的安装向导界面单击“下一步 ...

  3. max_element()与min_element()

    #include<iostream>#include<algorithm>using namespace std;bool cmp(int i,int j){ return i ...

  4. Maven学习总结(4)——Maven核心概念

    Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...

  5. 知新之--12-factors

    作为总的原则,在程序设计上很有高度... 参考URL:http://12factor.net/zh_cn/ ========================================== 12- ...

  6. hibernate即时获取数据库信息

    由于读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,无法反映数据库中的最新状况. 因此,可以设置读取 ...

  7. Android:让Link始终保持在程序的WebView中跳转

    在Android的WebView中,当点击调用网页的链接时,默认的动作是跳转到系统设定的默认浏览器中.如果想让链接始终在当前WebView中跳转的话,就需要添加以下代码: WebView webVie ...

  8. PHP array_intersect_ukey()

    定义和用法 array_intersect_ukey() 函数用回调函数比较键名来计算数组的交集. array_intersect_ukey() 返回一个数组,该数组包含了所有出现在 array1 中 ...

  9. 设计模式学习–Decorator

    What Decorator:动态地给一个对象加入一些额外的职责. 就添加功能来说.Decorator模式相比生成子类更加灵活. Why Decorator模式适用于能够动态的给对象增删职责.比方qq ...

  10. ActionBar第一课简单介绍

    .ActionBar简单介绍 ActionBar是显示在界面顶部的标题栏. 官方推荐开发者尽量使用 ActionBar代替OptionsMenu和TabHost. 典型应用方式有: 使用导航栏中的应用 ...