1 solutions

  • 0
    @ 2025-11-5 16:26:18

    C++ :

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <cmath>
    #define MAXN 100010
    using namespace std;
    
    int N=0,M=0,M1=0;
    int Num[MAXN]={0};
    long long T1 [MAXN<<2]={0};
    
    inline void Add(int t,long long v){
    	for(T1[t+=M1]+=v,t>>=1;t;t>>=1){
    		T1[t]=T1[t<<1]+T1[(t<<1)+1];
    	}
    }
    
    inline long long Query(int t){
    	int s=M1;
    	long long Ans=0;
    	for(t=t+M1+1;s^t^1;s>>=1,t>>=1){
    		if(!(s&1))	Ans+=T1[s^1];
    		if( (t&1))	Ans+=T1[t^1];
    	}
    	return Ans;
    }
    
    int main(){
    	//freopen("sequence.in","r",stdin);
    	//freopen("sequence.out","w",stdout);
    	
    	scanf("%d",&N);
    	for(M1=1;M1<N+2;M1<<=1);
    	
    	for(int i=1;i<=N;++i){
    		scanf("%d",&Num[i]);
    		T1[i+M1]=Num[i]-Num[i-1];
    	}
    	
    	for(int i=M1-1;i>=1;--i){
    		T1[i]=T1[i<<1]+T1[(i<<1)+1];
    	}
    	
    	scanf("%d",&M);
    	int k,s,t;
    	long long v=0;
    	for(int i=1;i<=M;++i){
    		scanf("%d",&k);
    		if(k==1){
    			scanf("%d%d%lld",&s,&t,&v);
    			Add(s,v);
    			if(t+1<=N)	Add(t+1,-v);
    		}
    		else{
    			scanf("%d",&s);
    			printf("%lld\n",Query(s));
    		}
    	}
    	
    	return 0;
    }
    
    
    • 1

    Information

    ID
    17778
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By