답안 #146707

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
146707 2019-08-25T12:43:47 Z dolphingarlic Sails (IOI07_sails) C++14
30 / 100
216 ms 3000 KB
#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 -