Submission #441305

#TimeUsernameProblemLanguageResultExecution timeMemory
441305SirCovidThe19thGrowing Trees (BOI11_grow)C++14
100 / 100
328 ms3348 KiB
#include <bits/stdc++.h> using namespace std; const int mx = 1e5+5; int n, q, tmp[mx], bit[mx]; void upd(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 i){ int ret = 0; for (; i > 0; i -= i&(-i)) ret += bit[i]; return ret; } int search(int val){ //index of first element greater/equal to val int low = 1, high = n+1; while (low < high){ int mid = (low+high)/2; if (query(mid) >= val) high = mid; else low = mid+1; }return low; } int main(){ cin >> n >> q; for (int i = 1; i <= n; i++) cin >> tmp[i]; sort(tmp+1, tmp+n+1); for (int i = 1; i <= n; i++) upd(i, i, tmp[i]); while (q--){ char t; int a, b; cin >> t >> a >> b; if (t == 'F'){ int l = search(b), r = l+a-1; if (l > n) continue; else if (r >= n) upd(l, n, 1); else{ int fr = search(query(r)), lr = search(query(r)+1)-1; upd(l, fr-1, 1); upd(lr-(r-fr), lr, 1); } }else{ int l = search(a), r = search(b+1)-1; cout<<r-l+1<<endl; } } }
#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...