Submission #1208083

#TimeUsernameProblemLanguageResultExecution timeMemory
1208083PakinDioxideSails (IOI07_sails)C++17
5 / 100
22 ms2632 KiB
/*
    author  : PakinDioxide
    created : 26/05/2025 19:47
    task    : IOI07_sails
*/
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 1e5+5;

int n;
pair <ll, ll> a[mxN];
ll fen[mxN], idx = LLONG_MAX, ans = 0, t;

void upd(int idx, ll x) { for (int i = idx; i <= mxN; i += i & -i) fen[i] += x; }
ll qr(int idx) { ll x = 0; for (int i = idx; i > 0; i -= i & -i) x += fen[i]; return x; }

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i].first >> a[i].second;
    sort(a+1, a+n+1), reverse(a+1, a+n+1);
    for (int i = 1; i <= n; i++) {
        auto &[h, c] = a[i];
        idx = min(idx, h);
        if (idx >= c) upd(idx+1, -1), upd(idx-c+1, 1), idx -= c, c = 0;
        else upd(idx+1, -1), upd(1, 1), c -= idx, idx = 0;
        if (idx == 0) idx = h;
        upd(idx+1, -1), upd(idx-c+1, 1), idx -= c, c = 0;
        if (idx == 0) idx = h;
    }
    for (int i = 1; i < mxN; i++) t = qr(i), ans += t*(t-1)/2;
    cout << ans << '\n';
}

/*
if there are n sails on each hight, the inefficiency will be n*(n-1)/2

we sort the mast from long to short
*/
#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...