比赛 |
数列操作练习题 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
HZOI_蒟蒻一只 |
运行时间 |
2.092 s |
代码语言 |
C++ |
内存使用 |
18.50 MiB |
提交时间 |
2017-03-19 06:12:52 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct segmentree{
long long left,right,mid,sum;}p[1000005];
void build(int a,int b,int num)
{
p[num].left=a,p[num].right=b,p[num].mid=(a+b)/2,p[num].sum=0;
if(a+1==b)return;
build(a,p[num].mid,2*num);build(p[num].mid,b,2*num+1);
}
void add(int pos,int num,int n)
{
p[n].sum+=num;
if(p[n].left+1==p[n].right)return;
if(pos<p[n].mid)add(pos,num,2*n);
else add(pos,num,2*n+1);
}
int query(int a,int b,int n)
{
if(p[n].left==a&&p[n].right==b)return p[n].sum;
if(p[n].left+1==p[n].right)return p[n].sum;
if(a<p[n].mid)
if(b<=p[n].mid)return query(a,b,2*n);
else return query(a,p[n].mid,2*n)+query(p[n].mid,b,2*n+1);
else return query(a,b,2*n+1);
}
char a[8];int n,m,x,i,j;
int haha()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
scanf("%d",&n);build(1,n+1,1);
for(int k=1;k<=n;k++){scanf("%d",&x);add(k,x,1);}
scanf("%d",&m);
for(int k=1;k<=m;k++){scanf("%s",a);scanf("%d%d",&i,&j);
if(a[0]=='A')add(i,j,1);
else cout<<query(i,j+1,1)<<endl;}
//while(1);
}
int sb=haha();
int main(){;}