POJ 3468 线段树+状压
题意:给你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 线段树+状压的更多相关文章
- POJ:2777-Count Color(线段树+状压)
Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program d ...
- poj 3468(线段树)
http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...
- hdu 1698+poj 3468 (线段树 区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...
- hdu 5023 线段树+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...
- Bzoj 3813 奇数国 题解 数论+线段树+状压
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 748 Solved: 425[Submit][Status][Discuss] ...
- POJ 3468(树状数组的威力)
之前说过这是线段树的裸题,但是当看了http://kenby.iteye.com/blog/962159 这篇题解后我简直震惊了,竟然能如此巧妙地转化为用树状数组来处理,附上部分截图(最好还是进入原网 ...
- poj2777Count Color——线段树+状压
题目:http://poj.org/problem?id=2777 状压每个颜色的选择情况,取答案时 | 一番: 注意题目中的区间端点可能大小相反,在读入时换一下位置: 注意pushdown()中要l ...
- POJ 3468 线段树裸题
这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...
- poj 3468 线段树区间更新/查询
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
随机推荐
- php base64互转pdf
/* * base64转pdf */ function base642pdf($formTxt,$toPdf) { $file = file_get_contents($formTxt);//读 $d ...
- 【转载】IDEA:XML配置提示URI is not registered
在idea开发中,遇到xml提示URI is not registered....其实是idea找不到约束文件,下面讲解一下如何解决这一个问题吧. 现的问题是,xml文件右边有提示,提示内容为:URI ...
- 如何利用showdoc自动生成API文档
介绍 showdoc是一个适合IT团队的文档工具,阅读本文前需要对showdoc有基本了解 .基本介绍可看:https://www.showdoc.cc/help 对于写API文档这件事,虽然说文本编 ...
- python--(十步代码学会线程)
python--(十步代码学会线程) 一.线程的创建 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getname(): 返回线程名. # setName(): 设置 ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- 第十节:pandas之loc()、iloc()与ix()索引
- Django-cookie与session操作
添加cookie: def login(req): if req.method=="POST": uf = UserInfoForm(req.POST) if uf.is_vali ...
- SFTP文件上传下载
http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html (转载)
- 【hdu 2036】改革春风吹满地
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=2036 [题意] 中文题 [题解] 这里用的是叉积对应的求三角形的面积; 即 A×B=A*B*sin ...
- qwb与小数
qwb与小数 Time Limit: 1 Sec Memory Limit: 128 MB Description qwb遇到了一个问题:将分数a/b化为小数后,小数点后第n位的数字是多少? 做了那 ...