Submission #1313459

#TimeUsernameProblemLanguageResultExecution timeMemory
1313459neonglitchSimple (info1cup19_simple)C++20
100 / 100
365 ms27264 KiB
#include <iostream> using namespace std; #define int long long const int inf=1e18; const int N=1e6+100; int a[N],seg[N][4],n,lazy[N]; void build(int v=1,int l=1,int r=n) { if(l==r) { seg[v][0]=seg[v][1]=-inf; // max seg[v][2]=seg[v][3]=inf; // min seg[v][a[l]%2]=a[l]; seg[v][2+(a[l]%2)]=a[l]; return; } int m=(l+r)>>1,lc=v<<1,rc=lc|1; build(lc,l,m); build(rc,m+1,r); seg[v][0]=max(seg[lc][0],seg[rc][0]); seg[v][1]=max(seg[lc][1],seg[rc][1]); seg[v][2]=min(seg[lc][2],seg[rc][2]); seg[v][3]=min(seg[lc][3],seg[rc][3]); } void push(int v,int l,int r) { int m=(l+r)>>1,lc=v<<1,rc=lc|1; if(lazy[v]&1) { swap(seg[v][0],seg[v][1]); swap(seg[v][2],seg[v][3]); } seg[v][0]+=lazy[v]; seg[v][1]+=lazy[v]; seg[v][2]+=lazy[v]; seg[v][3]+=lazy[v]; if(l!=r) { lazy[lc]+=lazy[v]; lazy[rc]+=lazy[v]; } lazy[v]=0; } void update(int ql,int qr,int qv,int l=1,int r=n,int v=1) { push(v,l,r); if(qr<l or r<ql) { return; } if(ql<=l and r<=qr) { lazy[v]+=qv; push(v,l,r); return; } int m=(l+r)>>1,lc=v<<1,rc=lc|1; update(ql,qr,qv,l,m,lc); update(ql,qr,qv,m+1,r,rc); seg[v][0]=max(seg[lc][0],seg[rc][0]); seg[v][1]=max(seg[lc][1],seg[rc][1]); seg[v][2]=min(seg[lc][2],seg[rc][2]); seg[v][3]=min(seg[lc][3],seg[rc][3]); } pair<int,int> get(int ql,int qr,int l=1,int r=n,int v=1) { push(v,l,r); if(qr<l or r<ql) { return {inf,-inf}; } if(ql<=l and r<=qr) { return {seg[v][2],seg[v][1]}; } int m=(l+r)>>1,lc=v<<1,rc=lc|1; auto a1=get(ql,qr,l,m,lc); auto a2=get(ql,qr,m+1,r,rc); return {min(a1.first,a2.first),max(a1.second,a2.second)}; } main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; build(); int q; cin>>q; while(q--) { int ty; cin>>ty; if(!ty) { int l,r,v; cin>>l>>r>>v; update(l,r,v); // cout<<"NEW "; // for(int i=1;i<=n;i++) // { // cout<<max(get(i,i).first,get(i,i).second)<<' '; // } // cout<<endl; } else{ int l,r; cin>>l>>r; auto ans=get(l,r); if(ans.first>=inf) { ans.first=-1; } if(ans.second<0) { ans.second=-1; } // even odd cout<<ans.first<<' '<<ans.second<<endl; } } }

Compilation message (stderr)

subway.cpp:81:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   81 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...