Submission #553843

#TimeUsernameProblemLanguageResultExecution timeMemory
553843FidanAddk (eJOI21_addk)C++17
100 / 100
315 ms7972 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;

void update(ll id, ll val, vector<ll> &fen){
	id++;
	while(id<=fen.size()){
		fen[id]+=val;
		id+=id&(-id);
	}
}

ll query(ll id, vector<ll> &fen){
	ll s=0;
	id++;
	while(id>0){
		s+=fen[id];
		id-=id&(-id);
	}
	return s;
}

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

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

void solve(ll l, ll r, ll m){
	ll s=0;
	if(2*m>r-l+1) m=r-l-m+2;
	s=prefix(l, l+m-1)+m*(query(r-m, sum)-query(l+m-1, sum))+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);
		sum.push_back(0);
		pre.push_back(0);
	}
	for(i=1; i<=n; i++){
		update(i, v[i], sum);
		update(i, v[i]*i, pre);
	}
	ll qu;
	cin>>qu;
	while(qu--){
		ll asdf;
		cin>>asdf;
		
		if(asdf==1){
			vector<ll> c1(k+1);
			vector<ll> c2(k+1);
			for(i=0; i<k; i++){
				cin>>c1[i];
				c2[i]=v[c1[i]];
			}
			c1[k]=c1[0];
			c2[k]=c2[0];
			for(i=0; i<k; i++){
				update(c1[i], c2[i+1]-c2[i], sum);
				update(c1[i], c1[i]*(c2[i+1]-c2[i]), pre);
			}
			for(i=0; i<k; i++){
				v[c1[i]]=c2[i+1];
			}
		}
		
		else {
			ll l, r, m;
			cin>>l>>r>>m;
			solve(l, r, m);
		}
	}
	
	return 0;
}

Compilation message (stderr)

Main.cpp: In function 'void update(ll, ll, std::vector<long long int>&)':
Main.cpp:15:10: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |  while(id<=fen.size()){
      |        ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...