BZOJ3212 Pku3468 A Simple Problem with Integers 题解
题目大意:
一个数列,有两个操作:1.修改操作,将一段区间内的数加上c;2.查询操作,查询一段区间内的数的和。
思路:
线段树裸题,区间修改、区间查询,维护和以及加上的数,由于无序,不需要向下推标记,只需在子树更新完之后更新根节点即可。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; long long sum[],mor[]; void up(int cur,int t)
{
sum[cur]=sum[cur<<]+sum[cur<<|]+t*mor[cur];
} void add(int L,int R,int l,int r,int x,int cur)
{
if (L>=l && R<=r)
{
mor[cur]+=x;
sum[cur]+=(R-L+)*x;
return;
}
int mid=L+R>>;
if (l<=mid) add(L,mid,l,r,x,cur<<);
if (r>mid) add(mid+,R,l,r,x,cur<<|);
up(cur,R-L+);
} long long ask(int L,int R,int l,int r,int cur)
{
if (L>=l && R<=r) return sum[cur];
int mid=L+R>>;
long long ans=mor[cur]*(r-l+);
if (l<=mid) ans+=ask(L,mid,l,min(mid,r),cur<<);
if (r>mid) ans+=ask(mid+,R,max(l,mid+),r,cur<<|);
return ans;
} int main()
{
int n,m,i,a,b,c;
scanf("%d%d",&n,&m);
for (i=;i<=n;i++) scanf("%d",&a),add(,n,i,i,a,);
for (i=;i<=m;i++)
{
char ch=getchar();
while (ch<'A' || ch>'Z') ch=getchar();
if (ch=='Q') scanf("%d%d",&a,&b),printf("%lld\n",ask(,n,a,b,));
else scanf("%d%d%d",&a,&b,&c),add(,n,a,b,c,);
}
return ;
}
BZOJ3212 Pku3468 A Simple Problem with Integers 题解的更多相关文章
- BZOJ-3212 Pku3468 A Simple Problem with Integers 裸线段树区间维护查询
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1278 Sol ...
- bzoj3212 Pku3468 A Simple Problem with Integers 线段树
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2046 So ...
- BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2530 So ...
- bzoj3212 pku3468 A Simple Problem with Integers
一个有初值的数列.区间加.区间查 用线段树直接水过 然而并没有1A,主要是做题太快没看规模结果没注意线段树要用longlong建 卧槽怎么可以这么坑爹,害得我看见wa心慌了,还以为连线段树都要跪 一开 ...
- 【分块】【线段树】bzoj3212 Pku3468 A Simple Problem with Integers
线段树入门题…… 因为poj原来的代码莫名RE,所以丧病地写了区间修改的分块…… 其实就是块上打标记,没有上传下传之类. #include<cstdio> #include<cmat ...
- 3212: Pku3468 A Simple Problem with Integers
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1053 So ...
- bzoj 3212 Pku3468 A Simple Problem with Integers
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Description You ...
- bzoj 3212 Pku3468 A Simple Problem with Integers 线段树基本操作
Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2173 Solved: ...
- POJ3468:A Simple Problem with Integers——题解
http://poj.org/problem?id=3468 实现一个线段树,能够做到区间修改和区间查询和. 明显板子题. #include<cstdio> #include<cma ...
随机推荐
- NSDatePicker && NSDate
UIDatePicker *datePicker = [[UIDatePicker alloc]init]; datePicker.datePickerMode = UIDatePickerModeD ...
- 关闭 Visual Studio 2013 的 Browser Link 功能
最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本地49925的端口 . 很奇怪,一开始以为是 Visual Studio ...
- WebApiのエラーメッセージをどうカスタマイズです?
本来是发布在客户的Wiki上,所以就用日语写. ------------------------------------------------------------------------ Web ...
- WCF分布式开发必备知识(2):.Net Remoting
.Net Remoting技术,我们可以将其看作是一种分布式处理方式.作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程 ...
- CodeForces 371D Vessels(树状数组)
树状数组,一个想法是当往p注水时,认为是其容量变小了,更新时二分枚举,注意一些优化. #include<cstdio> #include<iostream> #include& ...
- hdu 4007 暴力or线段树 ***
尼玛,INF不能定义太大,找标程对拍了好久 #include<cstdio> #include<iostream> #include<algorithm> #inc ...
- Vector[C++]
// vector<int> vec; // for(int i = 0; i < 10; i++) // { // vec.push_back(5) ...
- ubuntu中jdk已经安装,但是eclipse启动报错
问题描述 在ubuntu中,jdk已经正常安装,java_home变量已经配置,但是启动eclipse的时候还是弹出以下错误信息: A Java RunTime Environment (JRE) o ...
- java杂记——数组拷贝
这里介绍两种java提供的数组拷贝方法: (1)Arrays提供的copyOf(T src, T desLength)和copyOfRange(T src, int from, int to) (2) ...
- CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想
http://codeforces.com/problemset/problem/735/D 题意是..一个数n的贡献是它的最大的因子,这个因子不能等于它本身 然后呢..现在我们可以将n拆成任意个数的 ...