前言
传送门 :
这个修改什么鬼啊
思路
大概这样
没看懂修改
CODE
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define endl '\n'
const int N = 1e5+10;
int ans,len;
int a[N],trA[N<<1],trB[N<<1];
int lowbit(int x)
{
return x&(-x);
}
void add1(int pos,int x)
{
for(int i = pos ; i<=(N<<1);i+=lowbit(i))
trA[i] +=x;
}
void add2(int pos,int x)
{
for(int i = pos ;i<=(N<<1);i+=lowbit(i))
trB[i]+=x;
}
int ask1(int pos)
{
int res= 0 ;
for(int i = pos;i;i-=lowbit(i))
res+=trA[i];
return res;
}
int ask2(int pos)
{
int res = 0;
for(int i = pos;i;i-=lowbit(i))
res+=trB[i];
return res;
}
void solve()
{
int n,m;cin>>n>>m;
string s;
for(int i=1;i<=n;i++)
{
cin>>a[i];
add1(i,a[i]);
add2(i,a[i]*i);
}
while(m -- )
{
cin>>s;
if(s[0] == 'Q')
{
int x;cin>>x;
ans = (x+1)*ask1(x) - ask2(x);
cout<<ans<<endl;
}
else
{
int x,y;cin>>x>>y;
add1(x,y-a[x]);
add2(x,(y-a[x])*x);
a[x] = y;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
solve();
return 0;
}