#include <bits/stdc++.h>
#pragma GCC Optimize("O3")
#define FOR(i, x, y) for (int i = x; i < y; i++)
#define MOD 1000000007
typedef long long ll;
using namespace std;
const int MAXH = 100000;
int bit1[100001], bit2[100001];
pair<int, int> a[100001];
void update(int l, int r, int val) {
for (int i = l; i <= MAXH; i += (i & (-i))) bit1[i] += val;
for (int i = r + 1; i <= MAXH; i += (i & (-i))) bit1[i] -= val;
for (int i = l; i <= MAXH; i += (i & (-i))) bit2[i] += val * (l - 1);
for (int i = r + 1; i <= MAXH; i += (i & (-i))) bit2[i] -= val * r;
}
int query(int l, int r) {
int ans = 0;
for (int i = r; i; i -= (i & (-i))) ans += bit1[i] * r;
for (int i = l - 1; i; i -= (i & (-i))) ans -= bit1[i] * (l - 1);
for (int i = r; i; i -= (i & (-i))) ans -= bit2[i];
for (int i = l - 1; i; i -= (i & (-i))) ans += bit2[i];
return ans;
}
int main() {
iostream::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
FOR(i, 0, n) cin >> a[i].first >> a[i].second;
sort(a, a + n);
int ans = 0;
FOR(i, 0, n) {
int ub = query(a[i].first - a[i].second + 1, a[i].first - a[i].second + 1);
int l = a[i].first - a[i].second + 1, r = a[i].first + 1;
while (l != r) {
int mid = (l + r) / 2;
if (query(mid, mid) < ub) r = mid;
else l = mid + 1;
}
int pos = l;
ans += query(pos, a[i].first);
update(pos, a[i].first, 1);
// FOR(i, 1, 6) cout << query(i, i) << ' '; cout << '\n';
l = 1, r = a[i].first;
while (l != r) {
int mid = (l + r) / 2;
if (query(mid, mid) > ub) l = mid + 1;
else r = mid;
}
ans += query(l, l + a[i].second - a[i].first + pos - 2);
update(l, l + a[i].second - a[i].first + pos - 2, 1);
// FOR(i, 1, 6) cout << query(i, i) << ' '; cout << '\n';
// cout << ans << '\n';
}
cout << ans;
return 0;
}
Compilation message
sails.cpp:2:0: warning: ignoring #pragma GCC Optimize [-Wunknown-pragmas]
#pragma GCC Optimize("O3")
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
5 ms |
376 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
15 ms |
760 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
39 ms |
1164 KB |
Output isn't correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
97 ms |
1732 KB |
Output isn't correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
169 ms |
2612 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
156 ms |
2972 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
216 ms |
3000 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |