非常神奇的题目啊,我语文不好,所以不写题解了。
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
int n,m;
LL a[100005];
LL c[100005];
void change1(int x,LL d)
{
while(x<=n)
{
c[x]+=d;
x+=x&(-x);
}
}
LL ask1(int x)
{
LL ans=0;
while(x>0)
{
ans+=c[x];
x-=x&(-x);
}
return ans;
}
LL s[100005];
void change2(int x,LL d)
{
while(x<=n)
{
s[x]+=d;
x+=x&(-x);
}
}
LL ask2(int x)
{
LL ans=0;
while(x>0)
{
ans+=s[x];
x-=x&(-x);
}
return ans;
}
char q[10];
int main()
{
scanf("%d%d",&n,&m);
int x,y;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
a[i]=x;
change1(i,(LL)x);
change2(i,(LL)x*(n-i+1));
}
LL ans;
int w;
for(int i=1;i<=m;i++)
{
scanf("%s",q+1);
if(q[1]=='Q')
{
scanf("%d",&x);
ans=ask2(x);
ans-=ask1(x)*(n-x);
printf("%lld\n",ans);
}
else
{
scanf("%d%d",&x,&y);
w=y-a[x];
change1(x,(LL)w);
change2(x,(LL)w*(n-x+1));
a[x]=y;
}
}
return 0;
}