Submission #1189298

#TimeUsernameProblemLanguageResultExecution timeMemory
1189298vneduAddk (eJOI21_addk)C++17
100 / 100
162 ms8332 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; template<class T> bool maximize(T &a, const T &b){ return (a < b ? a = b, 1 : 0); } template<class T> bool minimize(T &a, const T &b){ return (a > b ? a = b, 1 : 0); } #define fi first #define se second #define pb push_back #define ii pair<int, int> #define all(x) x.begin(), x.end() #define TASK "nonsense" /// end of template /// const int N = 1e5 + 10; struct segtree { ll t[N<<2],laz[N<<2],a[N]; segtree() {} void build(int id, int l, int r) { if(l==r) return void(t[id]=a[l]); int mid((l+r)>>1); build(id<<1,l,mid); build(id<<1|1,mid+1,r); t[id]=t[id<<1]+t[id<<1|1]; } void push(int id, int l, int r) { if(!laz[id]) return; int mid((l+r)>>1); t[id<<1]+=(mid-l+1)*laz[id]; laz[id<<1]+=laz[id]; t[id<<1|1]+=(r-mid)*laz[id]; laz[id<<1|1]+=laz[id]; laz[id]=0; } void add(int id, int l, int r, int u, int v, ll val) { if(l>v||r<u) return; if(u<=l && r<=v) { t[id]+=(r-l+1)*val; laz[id]+=val; return; } push(id,l,r); int mid((l+r)>>1); add(id<<1,l,mid,u,v,val); add(id<<1|1,mid+1,r,u,v,val); t[id]=t[id<<1]+t[id<<1|1]; } ll get(int id, int l, int r, int u, int v) { if(l>v||r<u) return 0LL; if(u<=l && r<=v) return t[id]; push(id,l,r); int mid((l+r)>>1); return get(id<<1,l,mid,u,v)+get(id<<1|1,mid+1,r,u,v); } } stree; int n,k,q; ll p[N],a[N]; void solve() { cin>>n>>k; for(int i=1;i<=n;++i) cin>>a[i],p[i]=p[i-1]+a[i]; for(int i=0;i<=n;++i) stree.a[i]=p[i]; stree.build(1,0,n); cin>>q; while(q--) { int type; cin>>type; if(type==1) { int b[11]; for(int i=1;i<=k;++i) cin>>b[i]; ll old=a[b[1]]; for(int i=1;i<k;++i) { ll cur=a[b[i+1]]-a[b[i]]; stree.add(1,0,n,b[i],n,cur); a[b[i]]+=cur; } ll cur=old-a[b[k]]; stree.add(1,0,n,b[k],n,cur); a[b[k]]+=cur; } else { int l,r,m; cin>>l>>r>>m; cout<<stree.get(1,0,n,l+m-1,r)-stree.get(1,0,n,l-1,r-m)<<'\n'; } } // for(int i=1;i<=n;++i) cout<<a[i]<<' '; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen(TASK".inp","r",stdin); // freopen(TASK".out","w",stdout); int testcase=1; // cin>>testcase; while (testcase--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...