Submission #991484

#TimeUsernameProblemLanguageResultExecution timeMemory
991484goats_9Sails (IOI07_sails)C++17
100 / 100
69 ms2652 KiB
/* Author: goats_9 */ #include <bits/stdc++.h> using namespace std; using ll = long long; #define LSOne(s) (s & -(s)) class BIT { int n; vector<ll> values; public: BIT(int _n) : n(_n), values(n + 1, 0LL) {} void update(int l, int r, int v) { if (r <= l) return; for (; l <= n; l += LSOne(l)) values[l] += v; for (; r <= n; r += LSOne(r)) values[r] -= v; } ll query(int i) { if (i > n) return -1; ll ret = 0; for (; i; i -= LSOne(i)) ret += values[i]; return ret; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<array<int, 2>> mast(n); for (int i = 0; i < n; i++) cin >> mast[i][0] >> mast[i][1]; sort(mast.begin(), mast.end()); BIT ft(mast.back()[0]); for (auto [h, k] : mast) { int ht = ft.query(h - k + 1); int l = 0, r = h; while (r - l > 1) { int g = (l + r) / 2; if (ft.query(g) > ht) l = g; else r = g; } int l1 = r; l = 1, r = h + 1; while (r - l > 1) { int g = (l + r) / 2; if (ft.query(g) >= ht) l = g; else r = g; } ft.update(r, h + 1, 1); ft.update(l1, l1 + k + r - h - 1, 1); } ll ans = 0; for (int i = 1; i <= mast.back()[0]; i++) { ll u = ft.query(i); ans += u*(u - 1)/2; } cout << ans; 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...