1 条题解

  • 0
    @ 2026-9-14 11:19:45
    $$\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 $$

    分别维护 i=1kai\sum_{i=1}^k a_ii=1ki×ai\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;
    }
    
    • 1

    信息

    ID
    857
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    5
    已通过
    4
    上传者