Submission #531368

#TimeUsernameProblemLanguageResultExecution timeMemory
531368OttoTheDinoGrowing Trees (BOI11_grow)C++17
0 / 100
434 ms3932 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (int i = s; i <= e; ++i) #define rrep(i,s,e) for (int i = s; i >= e; --i) #define pb push_back #define pf push_front #define fi first #define se second #define all(a) a.begin(), a.end() typedef long long ll; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<int> vi; typedef vector<double> vd; typedef vector<string> vs; typedef vector<ll> vll; const int mx = 1e5; int seg[4*mx+1] = {}, n; void upd (int x, int l, int r, int bl, int br, int id) { if (l==bl && r==br) { seg[id] += x; return; } int mid = (bl+br)/2; if (r<=mid) upd (x, l, r, bl, mid, 2*id); else if (l>mid) upd (x, l, r, mid+1, br, 2*id+1); else { upd (x, l, mid, bl, mid, 2*id); upd (x, mid+1, r, mid+1, br, 2*id+1); } } int qry (int x, int bl, int br, int id, int res) { res += seg[id]; if (bl==br) return res; int mid = (bl+br)/2; if (x<=mid) return qry (x, bl, mid, 2*id, res); return qry (x, mid+1, br, 2*id+1, res); } int get_min (int x) { int lo = 1, hi = n+1; while (lo<hi) { int mid = (lo+hi)/2; if (qry(mid,1,mx,1,0)>=x) hi = mid; else lo = mid+1; } return lo; } int get_max(int x) { int lo = 1, hi = n; while (lo<hi) { int mid = (lo+hi+1)/2; if (qry(mid,1,mx,1,0)>x) hi = mid-1; else lo = mid; } return lo; } int main() { ios::sync_with_stdio(0); cin.tie(0); int m; cin >> n >> m; int a[n+1]; rep (i,1,n) cin>>a[i]; sort(a+1,a+n+1); rep (i,1,n) upd (a[i], i, i, 1, mx, 1); rep (i,1,m) { char tp; cin>>tp; if (tp=='F') { int c, h; cin >> c >> h; int j = get_min(h); if (j==n+1) continue; if (j+c-1>=n) { upd (1, j, n, 1, mx, 1); continue; } int h2 = qry (j+c-1, 1, mx, 1, 0); int mi = get_min(h2); int ma = get_max(h2); int cnt = j+c-mi; if (j<mi) upd (1, j, mi-1, 1, mx, 1); upd (1, ma-cnt+1, ma, 1, mx, 1); } else { int mini, maxi; cin >> mini >> maxi; cout << get_max(maxi) - get_min(mini) + 1 << " here" << endl; } } 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...