Submission #1263703

#TimeUsernameProblemLanguageResultExecution timeMemory
1263703mkkkkkkkkAddk (eJOI21_addk)C++20
0 / 100
142 ms3484 KiB
#include <bits/stdc++.h> using namespace std; long long tree[2][400000]; vector<long long> vec; void build(long long node,long long l,long long r) { if(l==r) { tree[0][node]=vec[l]; tree[1][node]=vec[l]*(l+1); } else { long long m=(l+r)/2; build(node*2+1,l,m); build(node*2+2,m+1,r); tree[0][node]=tree[0][node*2+1]+tree[0][node*2+2]; tree[1][node]=tree[1][node*2+1]+tree[1][node*2+2]; } } long long query(long long node,long long l,long long r,long long L,long long R,long long t) { if(l>=L && r<=R) { return tree[t][node]; } else if(l>R || L>r) { return 0; } else { long long m=(l+r)/2; return query(node*2+1,l,m,L,R,t)+query(node*2+2,m+1,r,L,R,t); } } void upd(int node,int i,int x,int l,int r) { if(l==r) { tree[0][node]=x; tree[1][node]=x*(l+1); } else { int m=(l+r)/2; if(i<=m) upd(node*2+1,i,x,l,m); else upd(node*2+2,i,x,m+1,r); tree[0][node]=tree[0][node*2+1]+tree[0][node*2+2]; tree[1][node]=tree[1][node*2+1]+tree[1][node*2+2]; } } int main() { long long n,k; cin>>n>>k; for(long long n1=n;n1>0;n1--) { long long x; cin>>x; vec.push_back(x); } long long q; cin>>q; build(0,0,vec.size()-1); for(;q>0;q--) { long long t; cin>>t; if(t==1) { vector<int> vecc; for(long long k1=k;k1>0;k1--) { long long x; cin>>x; vecc.push_back(x-1); } for(int i=1;i<vecc.size();i++) { upd(0,vecc[i-1],vec[vecc[i]],0,vec.size()-1); } upd(0,vecc[vecc.size()-1],vec[vecc[0]],0,vec.size()-1); int temp=vec[vecc[0]]; for(int i=0;i<vecc.size()-1;i++) { vec[vecc[i]]=vec[vecc[i+1]]; } vec[vecc[vecc.size()-1]]=temp; } else { long long l,r,m; cin>>l>>r>>m; l--; r--; if((r-l+1)<2*m) { m=(r-l+2)-m; } long long br=0; if(m!=1) { br=br+query(0,0,vec.size()-1,l,l+m-2,1); br=br-query(0,0,vec.size()-1,l,l+m-2,0)*(l); br=br+query(0,0,vec.size()-1,r-m+2,r,0)*(r+2); br=br-query(0,0,vec.size()-1,r-m+2,r,1); } br=br+query(0,0,vec.size()-1,l+m-1,r-m+1,0)*(m); cout<<br<<endl; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...