Submission #217261

#TimeUsernameProblemLanguageResultExecution timeMemory
217261dolphingarlicGrowing Trees (BOI11_grow)C++14
100 / 100
127 ms3448 KiB
#include <bits/stdc++.h> #define FOR(i, x, y) for (int i = x; i < y; i++) using namespace std; int n, q, bit[100001], a[100001]; void update(int l, int r, int val) { for (; l <= n; l += (l & (-l))) bit[l] += val; for (r++; r <= n; r += (r & (-r))) bit[r] -= val; } int query(int pos) { int ans = 0; for (; pos; pos -= (pos & (-pos))) ans += bit[pos]; return ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> q; FOR(i, 1, n + 1) cin >> a[i]; sort(a + 1, a + n + 1); FOR(i, 1, n + 1) update(i, i, a[i]); while (q--) { char c; int a, b; cin >> c >> a >> b; if (c == 'F') { int l1 = 1, r1 = n; while (l1 != r1) { int mid = (l1 + r1) / 2; if (query(mid) < b) l1 = mid + 1; else r1 = mid; } if (query(l1) < b) continue; if (n - l1 < a) { update(l1, n, 1); continue; } int l2 = l1 - 1, r2 = l1 + a - 1, mx = query(r2); while (l2 != r2) { int mid = (l2 + r2 + 1) / 2; if (query(mid) == mx) r2 = mid - 1; else l2 = mid; } int l3 = 1, r3 = n; while (l3 != r3) { int mid = (l3 + r3 + 1) / 2; if (query(mid) > mx) r3 = mid - 1; else l3 = mid; } update(l1, l2, 1); a -= l2 - l1 + 1; update(l3 - a + 1, l3, 1); } else { if (a > query(n) || b < query(1)) { cout << "0\n"; continue; } int l1 = 1, r1 = n, l2 = 1, r2 = n; while (l1 != r1) { int mid = (l1 + r1) / 2; if (query(mid) < a) l1 = mid + 1; else r1 = mid; } while (l2 != r2) { int mid = (l2 + r2 + 1) / 2; if (query(mid) > b) r2 = mid - 1; else l2 = mid; } cout << l2 - l1 + 1 << '\n'; } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...