Submission #502572

#TimeUsernameProblemLanguageResultExecution timeMemory
502572uncriptedAddk (eJOI21_addk)C++11
36 / 100
2090 ms2808 KiB
#include<bits/stdc++.h>
using namespace std;
long long pre[100005];
	long long n,k;
void update(long long l, long long r, long long x){
	for(long long i=l; i<=r; i++){
		long long tr=i;
		while(tr<=n){
			pre[tr]+=x;
				tr+=tr&(-tr);
		}
	
	}
}

long long sum(long long l){
	long long s=0;
	while(l>0){
		s+=pre[l];
		l-=l&(-l);
	}
	return s;
}
int main(){

	cin>>n>>k;
	long long a[n+1];

	long long prefix=0;
	for(long long i=1; i<=n; i++){
		cin>>a[i];
		prefix+=a[i];
		update(i,i, prefix);
		
	
	}
	long long q;
	cin>>q;
	while(q--){
		long long x;
		cin>>x;
		if(x==1){
			long long b[k+1];
		for(long long i=1; i<=k; i++){
			
			cin>>b[i];
		}
		update(b[k], n, a[b[k]]-a[b[1]]);
		for(long long i=1; i<k; i++){
			
		update(b[i], n, a[b[i]]-a[b[i+1]]);
		}
		continue;	
		}
		long long l,r,m;
		cin>>l>>r>>m;
		
		long long s=0;
		s+=sum(r)-sum(l+m-2);
			
		s-=sum(r-m)-sum(l-2);
		cout<<s<<endl;
	}
	
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...