이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = array<int, 2>;
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()
template<typename T> struct FenwickTree {
int n; vector<T> arr;
FenwickTree(int _n) : n(_n + 1), arr(n) {}
/** @return sum on [0, idx] */
T pre(int idx) {
T tot = 0;
for (++idx; idx > 0; idx -= idx & -idx) {
tot += arr[idx];
}
return tot;
}
/** changes the location at idx by dx */
void upd(int idx, T dx) {
for (++idx; idx < n; idx += idx & -idx) {
arr[idx] += dx;
}
}
/** @return sum on [l, r] */
T qry(int l, int r) { return pre(r) - pre(l - 1); }
};
template <typename T, typename F>
T first_true(T low, T high, const F &fn) {
while (low < high) {
T mid = low + (high - low) / 2;
fn(mid) ? high = mid : low = mid + 1;
}
return low;
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
int n; cin >> n;
vector<int> h(n), k(n);
for (int i = 0; i < n; i++) {
cin >> h[i] >> k[i];
}
vector<int> ord(n);
iota(all(ord), 0);
sort(all(ord), [&](int i, int j) -> bool {
return h[i] < h[j];
});
const int MX = *max_element(all(h));
FenwickTree<int> ft(MX + 1);
for (int i : ord) {
int last = h[i] - k[i];
int val = ft.pre(last);
if (last == 0 || ft.pre(last - 1) != val) {
ft.upd(last, 1);
ft.upd(h[i], -1);
} else {
int idx_1 = first_true(0, h[i], [&](int x) -> bool {
return ft.pre(x) < val;
});
int idx_2 = first_true(0, h[i], [&](int x) -> bool {
return ft.pre(x) <= val;
});
ft.upd(idx_1, 1);
ft.upd(h[i], -1);
ft.upd(idx_2, 1);
ft.upd(idx_2 + k[i] - (h[i] - idx_1), -1);
}
}
ll res = 0;
for (int i = 0; i < MX; i++) {
int cnt = ft.pre(i);
res += 1ll * cnt * (cnt - 1) / 2;
}
cout << res << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |