Submission #305056

#TimeUsernameProblemLanguageResultExecution timeMemory
305056AkashiSails (IOI07_sails)C++14
40 / 100
1092 ms1400 KiB
#include <bits/stdc++.h>
using namespace std;

const int DIM = 1e5 + 5;

struct poles{
    int h, k;
    bool operator < (const poles &aux)const{
        return h < aux.h;
    }
};

poles a[DIM];

int n;
priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> pq;

void add(int x, int nr) {
    if (nr == 0) return ;

    if (!pq.empty()) {
        if (pq.top().first == x) {
            nr += pq.top().second;
            pq.pop();
        }
    }

    pq.push({x, nr});
}

int main()
{
    #ifdef HOME
    freopen("sails.in", "r", stdin);
    freopen("sails.out", "w", stdout);
    #endif // HOME

    scanf("%d", &n);
    int mx = 0;
    for (int i = 1; i <= n ; ++i) {
        scanf("%d%d", &a[i].h, &a[i].k);
        mx = max(mx, a[i].h);
    }

    sort(a + 1, a + n + 1);
    int now = 1;
    for (int i = 1; i <= n ; ++i) {
        int nr = 0;
        while (now <= a[i].h) {++nr; ++now;}

        add(0, nr);

        vector <pair <int, int>> v;

        while (a[i].k > 0) {
            int x, y;
            tie(x, y) = pq.top();
            pq.pop();

            if (y >= a[i].k) {
                v.push_back({x, y - a[i].k});
                v.push_back({x + 1, a[i].k});
                a[i].k = 0;
            } else {
                a[i].k -= y;
                v.push_back({x + 1, y});
            }
        }

        for (int i = v.size() - 1; i >= 0 ; --i)
            add(v[i].first, v[i].second);
    }

    long long Sol = 0;
    while (!pq.empty()) {
        int x, y;
        tie(x, y) = pq.top();
        pq.pop();

        if (x > 0) Sol = Sol + 1LL * y * (x - 1) * x / 2;
    }

    printf("%lld", Sol);

    return 0;
}

Compilation message (stderr)

sails.cpp: In function 'int main()':
sails.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
sails.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   41 |         scanf("%d%d", &a[i].h, &a[i].k);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...