Submission #733679

#TimeUsernameProblemLanguageResultExecution timeMemory
733679MateiKing80Simple (info1cup19_simple)C++14
100 / 100
427 ms53096 KiB
#include <iostream> using namespace std; long long v[200005]; struct nod { long long maxp=-1,minp=-1,maxi=-1,mini=-1,lazy=0; } aint[2000005]; nod join(nod a, nod b) { nod x; x.lazy=0; x.maxp=max(a.maxp,b.maxp); x.maxi=max(a.maxi,b.maxi); if(a.mini==-1) x.mini=b.mini; else if(b.mini==-1) x.mini=a.mini; else x.mini=min(a.mini,b.mini); if(a.minp==-1) x.minp=b.minp; else if(b.minp==-1) x.minp=a.minp; else x.minp=min(a.minp,b.minp); return x; } void propag(long long poz) { if(aint[poz].lazy%2==1) { swap(aint[poz].maxi,aint[poz].maxp); swap(aint[poz].mini,aint[poz].minp); } if(aint[poz].maxp!=-1) aint[poz].maxp+=aint[poz].lazy; if(aint[poz].maxi!=-1) aint[poz].maxi+=aint[poz].lazy; if(aint[poz].minp!=-1) aint[poz].minp+=aint[poz].lazy; if(aint[poz].mini!=-1) aint[poz].mini+=aint[poz].lazy; aint[2*poz].lazy+=aint[poz].lazy; aint[2*poz+1].lazy+=aint[poz].lazy; aint[poz].lazy=0; } void build(long long poz, long long st, long long dr) { if(st==dr) { if(v[st]%2==0) { aint[poz].maxp=v[st]; aint[poz].minp=v[st]; aint[poz].maxi=-1; aint[poz].mini=-1; } else { aint[poz].maxi=v[st]; aint[poz].mini=v[st]; aint[poz].maxp=-1; aint[poz].minp=-1; } return; } long long mid=(st+dr)/2; build(2*poz,st,mid); build(2*poz+1,mid+1,dr); aint[poz]=join(aint[2*poz],aint[2*poz+1]); } nod query(long long poz, long long st, long long dr, long long a, long long b) { propag(poz); if(a<=st && dr<=b) return aint[poz]; long long mid=(st+dr)/2; if(b<=mid) return query(2*poz,st,mid,a,b); if(mid+1<=a) return query(2*poz+1,mid+1,dr,a,b); return join(query(2*poz,st,mid,a,b),query(2*poz+1,mid+1,dr,a,b)); } void update(long long poz, long long st, long long dr, long long a, long long b, long long val) { propag(poz); if(a<=st && dr<=b) { aint[poz].lazy=val; propag(poz); return; } long long mid=(st+dr)/2; if(a<=mid) update(2*poz,st,mid,a,b,val); else propag(2*poz); if(mid+1<=b) update(2*poz+1,mid+1,dr,a,b,val); else propag(2*poz+1); aint[poz]=join(aint[2*poz],aint[2*poz+1]); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long n; cin>>n; for(long long i=1; i<=n; i++) cin>>v[i]; build(1,1,n); long long q; cin>>q; for(long long i=0; i<q; i++) { long long cer; cin>>cer; if(cer==1) { long long a,b; cin>>a>>b; nod x=query(1,1,n,a,b); cout<<x.minp<<" "<<x.maxi<<'\n'; } else { long long a,b,val; cin>>a>>b>>val; update(1,1,n,a,b,val); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...