Submission #1301714

#TimeUsernameProblemLanguageResultExecution timeMemory
1301714h1drogenAddk (eJOI21_addk)C++20
0 / 100
60 ms6048 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ll unsigned long long #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define f first #define s second #define yes cout<<"YES\n" #define no cout<<"NO\n" #define imp cout<<-1<<"\n" #define pb push_back #define pii pair<int,int> #define piii pair<int,pair<int,int>> #define ls v<<1 #define rs v<<1|1 #define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define ptree tree * const int mod=1e9+7; const int INF = 1e18; const int sqr=317; const int N=1e6; int modi(int a,int b){ return (a*b)%mod; } struct node{ int tot; int acc; int dec; }; struct segtree{ vector<node>t; int n; void init(int sz){ n=sz; t.resize(n*4); } void upd(int v,int tl,int tr,int pos,int val){ if(tl==tr){ t[v].tot+=val; t[v].acc=val*pos; t[v].dec=val*(n-pos); } else{ int tm=(tl+tr)/2; if(pos<=tm){ upd(ls,tl,tm,pos,val); } else upd(rs,tm+1,tr,pos,val); t[v].tot=t[ls].tot+t[rs].tot; t[v].acc=t[ls].acc+t[rs].acc; t[v].dec=t[ls].dec+t[rs].dec; } } int get1(int v,int tl,int tr,int l,int r){ if(tl>r or l>tr) return 0LL; if(l<=tl and tr<=r){ return t[v].acc; } int tm=(tl+tr)/2; return get1(ls,tl,tm,l,r)+get1(rs,tm+1,tr,l,r); } int get2(int v,int tl,int tr,int l,int r){ if(tl>r or l>tr) return 0LL; if(l<=tl and tr<=r){ return t[v].tot; } int tm=(tl+tr)/2; return get2(ls,tl,tm,l,r)+get2(rs,tm+1,tr,l,r); } int get3(int v,int tl,int tr,int l,int r){ if(tl>r or l>tr) return 0LL; if(l<=tl and tr<=r){ return t[v].dec; } int tm=(tl+tr)/2; return get3(ls,tl,tm,l,r)+get3(rs,tm+1,tr,l,r); } }; void solve(){ int n,m,k,a=1e18,b=0,c=0,d,e=0,f=0,q; cin>>n>>k; segtree t; t.init(n+1); vector<int>v(n+1); for(int i=1;i<=n;i++){ cin>>v[i]; t.upd(1,1,n,i,v[i]); } cin>>q; for(int i=1;i<=q;i++){ int type,l,r,m; cin>>type; if(type==1){ for(int j=0;j<k;j++) cin>>a; } else{ cin>>l>>r>>m; int len=min((r-l+1)/2,m); int ans=0; // cout<<l<<" "<<l+len-1<<" "<<r-len+1<<" "<<r<<"\n"; ans+=t.get1(1,1,n,l,l+len-1)-t.get2(1,1,n,l,l+len-1)*(l-1); // cout<<ans<<" "; ans+=t.get3(1,1,n,r-len+1,r)-t.get2(1,1,n,r-len+1,r)*(n-r); // cout<<ans<<" "; ans+=t.get2(1,1,n,l+len,r-len)*(r-l+1-len-len); cout<<ans<<"\n"; } } } signed main(){ fast; int t=1; // cin>>t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...