Submission #1277384

#TimeUsernameProblemLanguageResultExecution timeMemory
1277384ngunguoi45Unija (COCI17_unija)C++17
100 / 100
437 ms39936 KiB
#include <bits/stdc++.h>
#define fi first
#define se second

using namespace std;

const int maxn = (int)1e6+5;
const int maxv = (int)5e6+5;

struct Event {
    int x, type, val;
    Event () {}
    Event (int _x, int _c, int _d): x(_x), type(_c), val(_d) {}
};

int n;
vector<Event> events;
priority_queue<pair<int,int>> pq;
long long ans = 0;

bool cmp (Event a, Event b) {
    return (a.x < b.x);
}

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

    cin >> n;
    for (int i = 1;i <= n; i++) {
        int x, y;
        cin >> x >> y;
        events.push_back(Event(-x/2+1, 1, y));
        events.push_back(Event(x/2+1, -1, y));
    }
    sort (events.begin(), events.end(), cmp);
    for (int i = 0;i+1 < (int)events.size(); i++) {

        if (events[i].type == -1) {
            while ((int)pq.size() && pq.top().se < events[i].x) pq.pop();
        }

        else if (events[i].type == 1) {
            int r = -(events[i].x-1);
            pq.push({events[i].val, r});
        }

        if ((int)pq.size()) {
            ans += 1LL * pq.top().fi * (events[i+1].x - events[i].x);
        }
    }
    cout << ans << "\n";
    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...