Submission #1318385

#TimeUsernameProblemLanguageResultExecution timeMemory
1318385muhammad-mutahirSimple (info1cup19_simple)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #define print(l) for(auto i:l) cout<<i<<" ";cout<<endl; #define input(t,l,n) vector<t>l(n);for(int i = 0;i<n;i++)cin>>l[i]; #define int long long #define pb push_back #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> #define all(l) l.begin(),l.end() #define pii pair<int,int> #define fi first #define se second const int M = 1e9+7; const int inf = 1e18; const int N = 2e6+10; int bp(int x, int y, int p){ int res = 1; x = x % p; while (y > 0) { if (y & 1) res = (res * x) % p; y = y >> 1; x = (x * x) % p; } return res; } int MI(int n, int p){ return bp(n, p - 2, p); } int mul(int x,int y, int p){ return x * 1ull * y % p; } int di(int x,int y, int p){ return mul(x, MI(y, p), p); } struct Node{ int mxo = -inf; int mio = inf; int mxe = 0; int mie = 0; int lz = 0; }; Node seg[4*N]; int n , m , k , q; void lazy(int v){ int x = seg[v].lz; // int lc = 2*v; v*=2; seg[v].lz+=x; if(x%2 == 0){ seg[v].mxo+=x; seg[v].mio+=x; seg[v].mxe+=x; seg[v].mie+=x; } else{ int mmxo = seg[v].mxo; int mmxe = seg[v].mxe; int mmio = seg[v].mio; int mmie = seg[v].mie; seg[v].mxo = mmxe+x; seg[v].mio = mmie+x; seg[v].mxe = mmxo+x; seg[v].mie = mmio+x; } v++; seg[v].lz+=x; if(x%2 == 0){ seg[v].mxo+=x; seg[v].mio+=x; seg[v].mxe+=x; seg[v].mie+=x; } else{ int mmxo = seg[v].mxo; int mmxe = seg[v].mxe; int mmio = seg[v].mio; int mmie = seg[v].mie; seg[v].mxo = mmxe+x; seg[v].mio = mmie+x; seg[v].mxe = mmxo+x; seg[v].mie = mmio+x; } v--; v/=2; seg[v].lz = 0; return; } Node join(Node a,Node b){ Node tp; tp.mxo = max(a.mxo,b.mxo); tp.mxe = max(a.mxe,b.mxe); tp.mio = min(a.mio,b.mio); tp.mie = min(a.mie,b.mie); return tp; } void upd(int l,int r,int x,int s = 0,int e = N,int v = 1){ lazy(v); if(l<=s and e<=r){ // cout<<s<<" "<<e<<" "<<x<<endl; seg[v].lz+=x; if(x%2 == 0){ seg[v].mxo+=x; seg[v].mio+=x; seg[v].mxe+=x; seg[v].mie+=x; } else{ int mmxo = seg[v].mxo; int mmxe = seg[v].mxe; int mmio = seg[v].mio; int mmie = seg[v].mie; // cout<<l<<" "<<r seg[v].mxo = mmxe+x; seg[v].mio = mmie+x; seg[v].mxe = mmxo+x; seg[v].mie = mmio+x; } return; } if(r<=s or e<=l){ return; } int mid = (s+e)/2; int lc = 2*v,rc = lc+1; upd(l,r,x,s,mid,lc); upd(l,r,x,mid,e,rc); seg[v] = join(seg[lc],seg[rc]); } Node get(int l ,int r,int s = 0,int e = N,int v = 1){ lazy(v); if(l<=s and e<=r){ return seg[v]; } if(e<=l or r<=s){ Node tp; tp.mie = inf; tp.mio = inf; tp.mxe = -inf; tp.mxo = -inf; return tp; } int mid = (s+e)/2; int lc = 2*v,rc = lc+1; return join( get(l,r,s,mid,lc) , get(l,r,mid,e,rc) ); } void solve(int testcase_number){ cin>>n; input(int,l,n); for(int i = 0;i<n;i++){ // cout<<"upd"<<" "<<i<<" "<<i+1<<" "<<l[i]<<endl; upd(i,i+1,l[i]); } // Node tp = get(0,1); // cout<<tp.mie<<endl; cin>>q; while(q--){ int t; cin>>t; int a,b; cin>>a>>b; if(t == 0){ int x; cin>>x; upd(a-1,b,x); } else{ Node tp = get(a-1,b); int x = tp.mie; if(tp.mie>=1e16){ x = -1; } int y = tp.mxo; if(y<=-1e16){ y = -1; } cout<<x<<" "<<y<<endl; } } } signed main(){ ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE cin.tie(0), cout.tie(0); cout << fixed<<setprecision(9); int t = 1; // cin>>t; for(int i = 1;i<=t;i++){ solve(i); } }