Submission #1038919

#TimeUsernameProblemLanguageResultExecution timeMemory
1038919BF001Growing Trees (BOI11_grow)C++17
100 / 100
76 ms4176 KiB
#include<bits/stdc++.h> using namespace std; #define N 100005 #define int long long int n, m, bit[N], a[N]; void ud(int l, int r, int val){ if (l > r) return; while (l <= n){ bit[l] += val; l += (l & (-l)); } r++; while (r <= n){ bit[r] -= val; r += (r & (-r)); } } int get(int pos){ int rt = 0; while (pos >= 1){ rt += bit[pos]; pos -= (pos & (-pos)); } return rt; } int bin(int val){ int rt = n + 1; int l = 1, r = n; while (l <= r){ int mid = (l + r) >> 1; if (get(mid) >= val){ rt = mid; r = mid - 1; } else l = mid + 1; } return rt; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> m; for (int i = 1; i <= n; i++){ cin >> a[i]; } sort(a + 1, a + n + 1); for (int i = 1; i <= n; i++){ ud(i, i, a[i]); } while (m--){ char typ; cin >> typ; if (typ == 'F'){ int c, h; cin >> c >> h; int l = bin(h); if (l == n + 1) continue; int r = l + c - 1; if (r >= n){ ud(l, n, 1); continue; } int l2 = bin(get(r)) - 1; int r2 = bin(get(r) + 1) - 1; ud(l, l2, 1); l2 = r2 - (c - (l2 - l + 1)) + 1; ud(l2, r2, 1); continue; } int l, r; cin >> l >> r; l = bin(l); r = bin(r + 1) - 1; cout << r - l + 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...