Submission #1175789

#TimeUsernameProblemLanguageResultExecution timeMemory
1175789bahaktlAddk (eJOI21_addk)C++20
100 / 100
1352 ms4788 KiB
#include <bits/stdc++.h>   
using namespace std;
#define int long long
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int inf=1e16;
const int N=2e5+10;
const int mod=1e9+7;
int t[N*4],a[N];

void update(int v,int tl,int tr,int pos) {
	if(tl==tr) {
		t[v]=a[tl];
		return;
	}
	int m=(tl+tr)/2;
	if(pos<=m) update(v*2,tl,m,pos);
	else update(v*2+1,m+1,tr,pos);
	t[v]=t[v*2]+t[v*2+1];
}

int get(int v,int tl,int tr,int l,int r) {
	if(tl>=l && tr<=r) return t[v];
	if(l>tr || r<tl) return 0;
	int m=(tl+tr)/2;
	return get(v*2,tl,m,l,r)+get(v*2+1,m+1,tr,l,r);
}

signed main () {
	ios_base::sync_with_stdio(false); cin.tie(nullptr);
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++) {
		cin>>a[i];
		update(1,1,n,i);
	}
	int q;
	cin>>q;
	while(q--) {
		int type;
		cin>>type;
		if(type==1) {
			int pos[k+1],val[k+1];
			for(int i=1;i<=k;i++) {
				int x;
				cin>>x;
				pos[i]=x;
				val[i]=a[x];
			}
			for(int i=1;i<=k;i++) {
				if(i==k) a[pos[i]]=val[1];
				else a[pos[i]]=val[i+1];
				update(1,1,n,pos[i]);
			}
		}
		else {
			int l,r,m;
			cin>>l>>r>>m;
			int ans=get(1,1,n,l,r)*m;
			for(int i=l,x=m-1;x>0;i++,x--) ans-=a[i]*x;
			for(int i=r,x=m-1;x>0;i--,x--) ans-=a[i]*x;
			cout<<ans<<"\n";
		}
	}
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...