传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3155
水题
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
typedef long long LL;
int lowbit(int x){
return x&-x;
}
int getint(){
int res=0;char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))(res*=10)+=ch-'0',ch=getchar();
return res;
}
int n,m;
LL a[maxn];
struct BIT{
LL d[maxn];
BIT(){
memset(d,0,sizeof(d));
}
LL get(int pos){
LL ans=0;
for(int j=pos;j;j-=lowbit(j))
ans+=d[j];
return ans;
}
void updata(int pos,LL val){
for(int j=pos;j<=n;j+=lowbit(j))
d[j]+=val;
}
}T[2];
void putint(LL x){
if(x<10)
putchar(x+'0');
else{
putint(x/10);
putchar(x%10+'0');
}
}
int main(){
n=getint();m=getint();
int x;
for(int i=1;i<=n;i++){
T[0].updata(i,a[i]=getint());
T[1].updata(i,a[i]*(n-i+1));
}
while(m--){
char ch=getchar();
char op[8];scanf("%s",op);
if(op[0]=='Q'){
int x=getint();
putint(T[1].get(x)-T[0].get(x)*(n-x));
puts("");
}else{
int pos=getint(),val=getint();
T[0].updata(pos,val-a[pos]);
T[1].updata(pos,(val-a[pos])*(n-pos+1));
a[pos]=val;
}
}
return 0;
}