Submission #1262648

#TimeUsernameProblemLanguageResultExecution timeMemory
1262648iordache_Addk (eJOI21_addk)C++20
100 / 100
98 ms4936 KiB
#include <bits/stdc++.h> #define pb push_back #define int long long using namespace std; const int N=1e5+5; struct AIB { int n; vector<int> aib; void init(int _n) {n=_n;aib.resize(n+5);} void update(int i, int x) { while(i<=n) { aib[i]+=x; i+=i&(-i); } } int pref(int i) { if(i<1) return 0; if(i>n) i=n; int ans=0; while(i) { ans+=aib[i]; i-=i&(-i); } return ans; } int query(int l, int r) {return pref(r)-pref(l-1);} }; int v[N]; AIB sp,pref,suf; signed main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,k; cin>>n>>k; for(int i=1;i<=n;++i) cin>>v[i]; sp.init(n);pref.init(n);suf.init(n); for(int i=1;i<=n;++i) { sp.update(i,v[i]); pref.update(i,v[i]*i); suf.update(i,v[i]*(n-i+1)); } int q;cin>>q; while(q--) { int op;cin>>op; if(op==1) { vector<int> poz; for(int _=1;_<=k;++_) {int x;cin>>x;poz.pb(x);} for(auto x:poz) { sp.update(x,-v[x]); pref.update(x,-v[x]*x); suf.update(x,-v[x]*(n-x+1)); } int cpy=v[poz[0]]; for(int i=0;i+1<poz.size();++i) { v[poz[i]]=v[poz[i+1]]; } v[poz.back()]=cpy; for(auto x:poz) { sp.update(x,v[x]); pref.update(x,v[x]*x); suf.update(x,v[x]*(n-x+1)); } } else { int l,r,m;cin>>l>>r>>m; int sz=r-l+1; int mx=min(sz-m+1,m); //for(int i=l;i<=l+mx-2;++i) cout<<i-l+1<<" "; //for(int i=l+mx-1;i<=r-mx+1;++i) cout<<mx<<" "; //for(int i=r-mx+2;i<=r;++i) cout<<r-i+1<<" "; //cout<<" "; int ans=pref.query(l,l+mx-2)-sp.query(l,l+mx-2)*(l-1); //cout<<ans<<"! "; ans+=sp.query(l+mx-1,r-mx+1)*mx; //cout<<ans<<"!! "; ans+=suf.query(r-mx+2,r)-sp.query(r-mx+2,r)*(n-r); cout<<ans<<'\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...