Submission #1293648

#TimeUsernameProblemLanguageResultExecution timeMemory
1293648Hamed_GhaffariGrowing Trees (BOI11_grow)C++20
100 / 100
96 ms4248 KiB
#include <bits/stdc++.h> using namespace std; #define lc id<<1 #define rc lc|1 #define mid ((l+r)>>1) const int MXN = 1e5+5; int n, mn[MXN<<2], mx[MXN<<2], lz[MXN<<2]; inline void apply(int x, int id) { mn[id] += x; mx[id] += x; lz[id] += x; } inline void push(int id) { if(!lz[id]) return; apply(lz[id], lc); apply(lz[id], rc); lz[id] = 0; } void upd(int s, int e, int x, int l=1, int r=n+1, int id=1) { if(s>=r || l>=e) return; if(s<=l && r<=e) return apply(x, id); push(id); upd(s, e, x, l, mid, lc); upd(s, e, x, mid, r, rc); mn[id] = mn[lc]; mx[id] = mx[rc]; } int get(int x, int l=1, int r=n+1, int id=1) { if(r-l == 1) return mn[id]; push(id); return x<mid ? get(x, l, mid, lc) : get(x, mid, r, rc); } int find(int x, int l=1, int r=n+1, int id=1) { if(mn[id]>x) return 0; if(mx[id]<=x) return r-l; push(id); return find(x, l, mid, lc) + find(x, mid, r, rc); } int q, a[MXN]; int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n >> q; for(int i=1; i<=n; i++) cin >> a[i]; sort(a+1, a+n+1); for(int i=1; i<=n; i++) upd(i, i+1, a[i]); while(q--) { char t; cin >> t; if(t=='F') { int c, h; cin >> c >> h; int L = find(h-1)+1, R = L+c-1; if(R>=n) { upd(L, n+1, 1); continue; } int val = get(R); int pos = find(val); if(pos==R) { upd(L, R+1, 1); continue; } int pos2 = max(find(val-1), L-1); upd(pos-c+(pos2+1-L)+1, pos+1, 1); upd(L, pos2+1, 1); } else { int l, r; cin >> l >> r; cout << find(r) - find(l-1) << '\n'; } } }
#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...