Submission #703163

#TimeUsernameProblemLanguageResultExecution timeMemory
703163LucaLucaMSails (IOI07_sails)C++17
100 / 100
48 ms5436 KiB
#include <bits/stdc++.h>

using namespace std;

/**
luam fiecare sail in ordine crescatoare dupa inaltime:
luam cele mai putin frecvente k inaltimi
adunam la raspuns
**/

const int NMAX = 1e5;

struct sail
{
    int x, y;

    bool operator < (const sail aux) const
    {
        if (x == aux.x)
            return y > aux.y;
        return x < aux.x;
    }
};

sail a[NMAX + 5];

int f[NMAX + 5];

multiset<pair<int, int>>st;

/**
tinem diferenta intre doua consecutive
**/

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    for (int i=1; i<=n; i++)
        cin >> a[i].x >> a[i].y;

    sort(a+1, a+n+1);

    multiset<int>st;

    st.insert(0);

    for (int i=1; i<=n; i++)
    {
        st.insert(a[i].x);

        auto p = st.upper_bound(a[i].x-a[i].y);
        auto q = prev(p);

        int nxt = *p + *q - a[i].x + a[i].y;
        if (q != st.begin())
            st.erase(q);
        st.insert(nxt);
        st.erase(p);
    }

    long long ans = 0, cnt = 0;
    for (auto it = st.end(); it-- != st.begin(); cnt++) // in ordine inversa
        ans += cnt * *it;

    cout << ans;

    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...