제출 #529346

#제출 시각아이디문제언어결과실행 시간메모리
529346sidonSails (IOI07_sails)C++17
100 / 100
55 ms2392 KiB
#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 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...