Submission #1105597

#TimeUsernameProblemLanguageResultExecution timeMemory
1105597FaggiSails (IOI07_sails)C++11
0 / 100
37 ms10460 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;
    cin >> n;
    for(i=2; i<=MAXN; i++)
    {
        dpCalc[i]=dpCalc[i-1]+(i-1);
    }
    for(i=0; i<n; i++)
    {
        cin >> a >> b;
        tot+=b;
        a--;
        b-=2;
        dp[a]++;
        if(b>=0)
            dp[b]--;
    }
    for(i=MAXN-1; i>=0; i--)
    {
        dp[i]+=dp[i+1];
    }
    for(i=pot; i<MAXS; i++)
    {
        seg[i]=dp[i-pot];
    }
    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...