Submission #553022

#TimeUsernameProblemLanguageResultExecution timeMemory
553022FidanAddk (eJOI21_addk)C++17
92 / 100
275 ms6724 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ll inf=(1e18);
const ll N=1'000'010;

ll n, k, i;
vector<ll> v;
vector<ll> sum;
vector<ll> pre;

ll prefix(ll l, ll r){
	ll s=0;
	s=pre[r]-pre[l-1]-(l-1)*(sum[r]-sum[l-1]);
	return s;
}

ll suffix(ll l, ll r){
	ll s=0;
	s=(r-l+2)*(sum[r]-sum[l-1])-prefix(l, r);
	return s;
}

void solve(ll l, ll r, ll m){
	ll s=0, k=r-l+1;
	if(2*m>k) m=k-m+1;
	s=prefix(l, l+m-1)+m*(sum[r-m]-sum[l+m-1])+suffix(r-m+1, r);
	cout<<s<<endl;
}

int main(){
	
	cin>>n>>k;
	v.push_back(0);
	pre.push_back(0);
	sum.push_back(0);
	
	for(i=1; i<=n; i++){
		ll a;
		cin>>a;
		v.push_back(a);
		pre.push_back(0);
		sum.push_back(0);
	}
	
	for(i=1; i<=n; i++){
		sum[i]=sum[i-1]+v[i];
		pre[i]=pre[i-1]+v[i]*i;
	}
	
	ll qu;
	cin>>qu;
	while(qu--){
		ll asdf;
		cin>>asdf;
		if(asdf==1){
			for(i=0; i<k; i++){
				ll asdf1;
				cin>>asdf1;
			}
		}
		else {
			ll l, r, m;
			cin>>l>>r>>m;
			solve(l, r, m);
		}
	}
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...