【题目分析】
变形+树状数组
【代码】
#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,x,m;
char s[11];
long long a[100001],y;
long long t[2][100001];
inline void add(int tmp,int k,long long x)
{for (;k<=n;k+=k&(-k)) t[tmp][k]+=x;}
inline long long gs(int tmp,int k)
{
long long ret=0;
for (;k;k-=k&(-k)) ret+=t[tmp][k];
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
{
scanf("%lld",&a[i]);
add(0,i,a[i]);
add(1,i,(i-1)*a[i]);
}
for (int i=1;i<=m;++i)
{
scanf("%s",s);
if (s[0]=='Q')
{
scanf("%d",&x);
printf("%lld\n",x*gs(0,x)-gs(1,x));
}
else
{
scanf("%d%lld",&x,&y);
long long opt=y-a[x];
a[x]+=opt;
add(0,x,opt);
add(1,x,(x-1)*opt);
}
}
}