제출 #1318412

#제출 시각아이디문제언어결과실행 시간메모리
1318412hssaan_arifSimple (info1cup19_simple)C++20
100 / 100
206 ms27336 KiB
// #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <unordered_map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> using namespace std; #define endl "\n" #define pb push_back #define int long long #define fi first #define se second const int N = 2e5 + 5, M = 1e9 + 7, LG = 20; struct node { int em = 1e15 , ex = -1e15 , om = 1e15 , ox = -1e15 , lz = 0; }; node seg[4*N]; int n , A[N] , l , r , val , t , q; node join(node a , node b){ node res; res.em = min(a.em , b.em); res.ex = max(a.ex , b.ex); res.om = min(a.om , b.om); res.ox = max(a.ox , b.ox); return res; } void push(int n){ seg[2*n].em += seg[n].lz; seg[2*n].ex += seg[n].lz; seg[2*n].om += seg[n].lz; seg[2*n].ox += seg[n].lz; seg[2*n].lz += seg[n].lz; seg[2*n+1].em += seg[n].lz; seg[2*n+1].ex += seg[n].lz; seg[2*n+1].om += seg[n].lz; seg[2*n+1].ox += seg[n].lz; seg[2*n+1].lz += seg[n].lz; if (seg[n].lz & 1){ swap(seg[2*n].em , seg[2*n].om); swap(seg[2*n].ex , seg[2*n].ox); swap(seg[2*n+1].em , seg[2*n+1].om); swap(seg[2*n+1].ex , seg[2*n+1].ox); } seg[n].lz = 0; } void build(int n , int s , int e){ if (s+1 == e){ if (A[s] & 1){ seg[n].om = A[s]; seg[n].ox = A[s]; }else{ seg[n].em = A[s]; seg[n].ex = A[s]; } } else{ int mid = (s+e)/2; build(2*n , s , mid); build(2*n+1 , mid , e); seg[n] = join(seg[2*n] , seg[2*n+1]); } } void upd(int n , int s , int e , int l , int r , int val){ if (e <= l || r <= s){ return; } if (l <= s && e <= r){ seg[n].em += val; seg[n].ex += val; seg[n].om += val; seg[n].ox += val; seg[n].lz += val; if (val & 1){ swap(seg[n].em , seg[n].om); swap(seg[n].ex , seg[n].ox); } return; } int mid = (s+e)/2; push(n); upd(2*n , s , mid , l , r , val); upd(2*n+1 , mid , e , l , r , val); seg[n] = join(seg[2*n] , seg[2*n+1]); } node ans(int n , int s , int e , int l , int r){ if (e <= l || r <= s){ node res; return res; } if (l <= s && e <= r){ return seg[n]; } int mid = (s+e)/2; push(n); return join(ans(2*n , s , mid , l , r) , ans(2*n+1 , mid , e , l , r)); } void solve(){ cin >> n; for (int i=1 ; i<=n ; i++){ cin >> A[i]; } build(1 , 1 , n+1); cin >> q; while(q--){ cin >> t >> l >> r; if (t==0){ cin >> val; upd(1 , 1 , n+1 , l , r+1 , val); }else{ node res = ans(1 , 1 , n+1 , l , r+1); if (res.em < 1e15){ cout << res.em << ' '; }else{ cout << -1 << ' '; } if (res.ox > 0){ cout << res.ox << ' '; }else{ cout << -1 << ' '; } cout << endl; } } } signed main(){ // freopen("" , "r" , stdin); // freopen("" , "w" , stdout); // cout << setprecision(30); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int ts = 1; // cin >> ts; while(ts--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...