Submission #1251624

#TimeUsernameProblemLanguageResultExecution timeMemory
1251624apxoSails (IOI07_sails)C++20
100 / 100
68 ms1860 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "bits/debug.h" #else #define debug(...) #endif const int maxn = 1e5 + 5; int n; pair<int, int> a[maxn]; long long bit[maxn]; int cnt[maxn]; void update(int i, int x) { for (; i < maxn; i += i & (-i)) { bit[i] += x; } } int get(int i) { long long ans = 0; for (; i > 0; i -= i & (-i)) { ans += bit[i]; } return ans; } void upd(int l, int r) { if (l > r) return; update(l, 1); update(r + 1, -1); } void solve() { cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i].first >> a[i].second; } sort(a + 1, a + n + 1); int lim = 0; for (int i = 1; i <= n; ++i) { if (lim + a[i].second <= a[i].first) { upd(lim + 1, lim + a[i].second); lim += a[i].second; continue; } if (lim < a[i].first) { a[i].second -= a[i].first - lim; upd(lim + 1, a[i].first); } int deg = get(lim - a[i].second + 1); int l = 1, r = lim, pl = -1; while (l <= r) { int mid = (l + r) >> 1; if (get(mid) >= deg) { pl = mid; l = mid + 1; } else { r = mid - 1; } } l = 1, r = lim; int pr = -1; while (l <= r) { int mid = (l + r) >> 1; if (get(mid) <= deg) { pr = mid; r = mid - 1; } else { l = mid + 1; } } upd(pl + 1, lim); a[i].second -= lim - pl; // debug(i, lim, pl, pr, deg, a[i]); upd(pr, pr + a[i].second - 1); lim = a[i].first; } long long res = 0; for (int i = 1; i <= lim; ++i) { int x = get(i); res += 1ll * x * (x - 1) / 2; } cout << res; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...