이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int Z = 1e5+3;
int N, F[Z];
int64_t ans;
void add(int i, int v) {
for(; i < Z; i += i&-i) F[i] += v;
}
int get(int i) {
int v = 0;
for(; i > 0; i -= i&-i) v += F[i];
return v;
}
int lowerBound(int v) {
int i = 0;
for(int j = 1<<17; j /= 2; )
if(i + j < Z && F[i + j] < v) v -= F[i += j];
return i + 1;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
array<int, 2> a[N];
for(auto &[h, k] : a)
cin >> h >> k;
sort(a, a+N);
for(auto &[h, k] : a) {
int v = get(Z - h + k - 1);
int l = lowerBound(v), r = lowerBound(v + 1) - 1;
if(Z - h < l) {
add(Z - h, 1);
add(l, -1);
}
add(r - (k - max(0, l - (Z - h))) + 1, 1);
add(r + 1, -1);
}
for(int i = 1; i < Z; ++i) {
int64_t v = get(i);
ans += v * (v - 1);
}
cout << (ans >> 1);
}
# | 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... |