답안 #198622

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
198622 2020-01-26T23:50:22 Z MetB Sails (IOI07_sails) C++14
5 / 100
167 ms 2680 KB
#include <bits/stdc++.h>
 
#define N 1000001
 
using namespace std;
 
typedef long long ll;
 
const ll INF = 1e18, MOD = 1e9 + 7, MOD2 = 1e6 + 3;

ll n, m;

struct BIT {
	ll t[N];

	void update (int l, int r) {
		r++;
		for (; r <= m; r = (r | (r + 1)))
			t[r]--;
		for (; l <= m; l = (l | (l + 1)))
			t[l]++;
	}

	ll get (ll x) {
		ll sum = 0;
		for (; x >= 0; x = (x & (x + 1)) - 1)
			sum += t[x];
		return sum;
	}

	ll upper_bound (ll n, ll x) {
		int l = 0, r = n - 1;
		if (get (r) < x) return r + 1;

		while (l < r) {
			int mid = (l + r) / 2;
			if (get (mid) < x) l = mid + 1;
			else r = mid;
		}

		return l;
	}
} t;
pair <ll, ll> a[N];

int main () {
	cin >> n;

	for (ll i = 0; i < n; i++) {
		cin >> a[i].first >> a[i].second;
		m = max (m, a[i].first);
	}

	sort (a, a + n);

	for (ll i = n - 1; i >= 0; i--) {
		if (!a[i].second) continue;
		ll x = t.get (a[i].second - 1);
		ll l = t.upper_bound (a[i].first, x);
		ll r = t.upper_bound (a[i].first, x + 1) - 1;
		t.update (0, l - 1);
		a[i].second -= l;
		t.update (r - a[i].second + 1, r);
	}

	ll sum = 0;

	for (ll i = 0; i <= m; i++) {
		ll x = t.get (i);
		sum += x * (x - 1) / 2;
	}

	cout << sum;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 380 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 632 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 45 ms 1120 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 82 ms 1556 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 141 ms 2376 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 135 ms 2584 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 167 ms 2680 KB Output isn't correct
2 Halted 0 ms 0 KB -