Submission #1105603

#TimeUsernameProblemLanguageResultExecution timeMemory
1105603FaggiSails (IOI07_sails)C++11
0 / 100
44 ms9044 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int MAXN = 1e5;
const int MAXS = 262144;

ll seg[MAXS], dp[MAXN], vf[MAXN], pot = 131072, dpCalc[MAXN + 1];

void calc(ll x, ll nod) {
    if (nod >= pot) {
        vf[nod - pot] = x;
        return;
    }
    ll iz, der, mid, maD;
    mid = x / 2ll;
    iz = mid;
    der = mid;
    if (der + der < x) {
        der++;
    }
    maD = seg[nod * 2 + 1];
    if (maD < der) {
        iz += der - maD;
        der = maD;
    }
    if (iz > 0) {
        calc(iz, nod * 2);
    }
    if (der > 0) {
        calc(der, nod * 2 + 1);
    }
}

int main() {
    ll n, i, tot = 0, a, b, res = 0, lim;
    cin >> n;

    for (i = 2; i <= MAXN; i++) {
        dpCalc[i] = dpCalc[i - 1] + (i - 1);
    }

    for (i = 0; i < n; i++) {
        cin >> a >> b;
        lim = a - b - 1;
        tot += b;
        a--;
        dp[a]++;
        if (lim >= 0) {
            dp[lim]--;
        }
    }

    for (i = MAXN - 2; i >= 0; i--) {
        dp[i] += dp[i + 1];
        seg[i + pot] = dp[i];
    }

    for (i = pot - 1; i > 0; i--) {
        seg[i] = seg[i * 2] + seg[i * 2 + 1];
    }

    calc(tot, 1);

    for (i = MAXN - 1; i >= 0; i--) {
        res += dpCalc[vf[i]];
    }

    cout << res;

    return 0;
}
#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...