Submission #1318441

#TimeUsernameProblemLanguageResultExecution timeMemory
1318441muhammad-ahmadSimple (info1cup19_simple)C++20
100 / 100
328 ms31388 KiB
// #include <bits/stdc++.h> #include <iostream> #include <cmath> #include <algorithm> #include <map> #include <vector> #include <iomanip> #include <string> #include <queue> #include <set> #include <deque> #include <numeric> #include <stack> #include <chrono> using namespace std; void fast_io() { // freopen("", "r", stdin); // freopen("", "w", stdout); ios::sync_with_stdio(0); cin.tie(); cout.tie(); cout << setprecision(9); } #define int long long #define endl '\n' #define all(v) (v).begin(), (v).end() #define rall(v) (v).rbegin(), (v).rend() #define fi first #define se second const int N = 2e5 + 5; int n, q, a[N]; struct node { int val = 0, Omi = 1e18, Oma = -1e18, Emi = 1e18, Ema = -1e18, lazy = 0; } T[4 * N]; node join(node a, node b){ node c; c.Omi = min(a.Omi, b.Omi); c.Emi = min(a.Emi, b.Emi); c.Ema = max(a.Ema, b.Ema); c.Oma = max(a.Oma, b.Oma); return c; } pair<int, int> combine(pair<int, int> a, pair<int, int> b){ pair<int, int> c; c.fi = min(a.fi, b.fi); c.se = max(a.se, b.se); return c; } void apply(node &a, int x){ a.Omi += x, a.Oma += x, a.Emi += x, a.Ema += x; a.lazy += x; if (x % 2){ swap(a.Omi, a.Emi); swap(a.Oma, a.Ema); } } void push(int v){ int lc = 2 * v, rc = lc + 1, x = T[v].lazy; apply(T[lc], x); apply(T[rc], x); T[v].lazy = 0; return; } void build (int v = 1, int s = 1, int e = n + 1){ if (e - s == 1){ if (a[s] % 2){ T[v].Omi = a[s]; T[v].Oma = a[s]; T[v].Emi = 1e18; T[v].Ema = -1e18; } else { T[v].Emi = a[s]; T[v].Ema = a[s]; T[v].Omi = 1e18; T[v].Oma = -1e18; } T[v].val = 0; return; } int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2; build(lc, s, mid); build(rc, mid, e); T[v] = join(T[lc], T[rc]); } void upd(int x, int l, int r, int v = 1, int s = 1, int e = n + 1){ if (e <= l or r <= s) return; if (l <= s && e <= r){ apply(T[v], x); return; } push(v); int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2; upd(x, l, r, lc, s, mid); upd(x, l, r, rc, mid, e); T[v] = join(T[lc], T[rc]); } pair<int, int> query(int l, int r, int v = 1, int s = 1, int e = n + 1){ if (e <= l or r <= s) return {1e18, -1e18}; if (l <= s && e <= r){ if (s == 4 && e == 5){ } return {T[v].Emi, T[v].Oma}; } // cout << s << ' ' << e << endl; push(v); int lc = 2 * v, rc = lc + 1, mid = (s + e) / 2; if (mid < r){ pair<int, int> ans = query(l, r, rc, mid, e); if (l < mid){ ans = combine(ans, query(l, r, lc, s, mid)); } return ans; } else return query(l, r, lc, s, mid); } void solve() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; build(); cin >> q; for (int Q = 1; Q <= q; Q++){ int t; cin >> t; int l, r, v; if (t == 0){ cin >> l >> r >> v; upd(v, l, r + 1); } else { cin >> l >> r; pair<int, int> A = query(l, r + 1); if (A.fi > 1e17) A.fi = -1; if (A.se < -1e17) A.se = -1; cout << A.fi << ' ' << A.se << endl; } } // cout << query(2, 4).se << endl; } signed main() { fast_io(); srand(chrono::steady_clock::now().time_since_epoch().count()); int tc = 1; // cin >> tc; while (tc--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...