Submission #372326

#TimeUsernameProblemLanguageResultExecution timeMemory
372326gustasonAirplanes (LMIO17_lektuvai)C++11
51 / 100
91 ms12780 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; #define int ll struct SegTree { int n; vector<int> tree; SegTree(vector<int>& a) { n = a.size(); tree.assign(2*n, 0); for(int i = n; i < 2*n; i++) { tree[i] = a[i-n]; } for(int idx = n-1; idx > 1; idx--) { tree[idx] = max(tree[2*idx], tree[2*idx+1]); } } void update(int idx, int val) { idx += n; tree[idx] = val; while(idx > 1) { idx /= 2; tree[idx] = max(tree[2*idx], tree[2*idx+1]); } } int getmax(int l, int r) { l += n, r += n; int mx = 0; while(l < r) { if (l % 2) { mx = max(mx, tree[l]); l++; } if (r % 2) { r--; mx = max(mx, tree[r]); } l /= 2, r /= 2; } return mx; } }; signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> a(n); for(int i = 0; i < n; i++) { cin >> a[i]; } vector<int> p(n), r(n, -1); // iota(r.begin(), r.end(), 0); p[n-1] = -1; for(int i = 0; i < n-1; i++) { cin >> p[i]; p[i]--; r[p[i]] = i; } if (n <= 1000) { int q; cin >> q; for(int i = 0; i < q; i++) { char type; cin >> type; if (type == 'I') { int idx; cin >> idx; idx--; cout << a[idx] << "\n"; } else if (type == 'P') { int idx, by; cin >> idx >> by; idx--; a[idx] += by; vector<bool> vis(n+1, false); while(1) { int par = p[idx]; if (par == -1 || vis[par]) break; a[par] = max(a[par], a[idx]); idx = par; } } } } else { SegTree tree(a); int q; cin >> q; while(q--) { char type; cin >> type; if (type == 'I') { int idx; cin >> idx; idx--; int ans; if (r[idx] == -1) { ans = tree.getmax(idx, idx+1); } else { ans = max(tree.getmax(0, r[idx]+1), tree.getmax(idx, idx+1)); } cout << ans << "\n"; } else { int idx, val; cin >> idx >> val; idx--; tree.update(idx, max(tree.getmax(0, r[idx]+1), tree.getmax(idx, idx+1)) + val); } } } // for(int i = 0; i < n; i++) { // cout << r[i] << " "; // } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...