Submission #447816

#TimeUsernameProblemLanguageResultExecution timeMemory
447816gromperenSails (IOI07_sails)C++14
100 / 100
116 ms2788 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int long long const int MAXN = 1e5+5; int n, fen[MAXN+5]; void update(int i, ll val) { for (; i > 0; i -= i & (-i)) fen[i-1] += val; } int query(int i) { ll s = 0; for (; i < MAXN; i += i & (-i)) s += fen[i-1]; return s; } int getft(int x) { int l = 0, r = MAXN; while (l < r) { int m = (r + l + 1) / 2; if (query(m) >= x) { l = m; } else { r = m - 1; } } return l; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n; vector<pair<ll,ll>>a(n); for (int i= 0; i < n; ++i) cin >> a[i].first >> a[i].second; sort(a.begin(),a.end()); for (auto IT : a) { int h, k; tie(h, k) = IT; int p = h - k; update(h, 1); if (p == 0) continue; int lb = min(getft(query(p)), h), rb = getft(query(p) + 1); update(lb, -1), update(rb, -1); update(rb + k - (h - lb), 1); } ll ans = 0; for (int i = 1; i < MAXN; ++i) { ans += 1LL * query(i) * (query(i)-1) / 2; } cout << ans << "\n"; 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...