1 条题解
-
0$$\sum_{i=1}^k\sum_{j=1}^i a_j\\ =\sum_{i=1}^k (k-i+1)a_i\\ =(k+1)\sum_{i=1}^k a_i-\sum_{i=1}^k i\times a_i $$
分别维护 和 即可。
#include<iostream> #include<algorithm> #include<vector> #include<map> #define int long long #define lowbit(x) ((x)&(-(x))) using namespace std; const int N=1e5+7; int n,m,a[N],tr[N][2]; void add(int x,int k,int f){ for(;x<=n;x+=lowbit(x)) tr[x][f]+=k; } int ask(int x,int f){ int res=0; for(;x;x-=lowbit(x)) res+=tr[x][f]; return res; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; add(i,a[i],0); add(i,a[i]*i,1); } while(m--){ string s; cin>>s; if(s=="Query"){ int k; cin>>k; cout<<(k+1)*ask(k,0)-ask(k,1)<<'\n'; } else{ int x,y; cin>>x>>y; add(x,y-a[x],0); add(x,x*(y-a[x]),1); a[x]=y; } } return 0; }
信息
- ID
- 857
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 5
- 已通过
- 4
- 上传者