Cod sursa(job #2287121)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 21 noiembrie 2018 15:25:43
Problema Lupul Urias si Rau Scor 76
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long
#define PII pair < int , int >
#define MOD 1000000007
 
using namespace std;
 
ll n, m, l;
 
struct my {
    int pos, val;
};
 
my a[100100];
 
ll rs;
priority_queue < int > S;
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
 
    ifstream cin("lupu.in");
    ofstream cout("lupu.out");
 
    cin >> n >> m >> l;
 
    ll r = (m + 1) % l;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].pos >> a[i].val;
 
        if (a[i].pos < r && a[i].pos <= m) S.push(a[i].val);
    }
 
    if (S.size()) rs += S.top(), S.pop();
 
    sort(a + 1, a + n + 1, [&](my a, my b){ return a.pos < b.pos; });
 
    int last = -1;
    for (int i = 1; i <= n; i++) {
        if (a[i].pos < r) continue;
 
        int inter = (a[i].pos - r) / l;
        int cp = inter;
        if (a[i].pos <= m) S.push(a[i].val);
 
        while (i + 1 <= n && (a[i + 1].pos - r) / l == cp && a[i + 1].pos <= m) S.push(a[i + 1].val), i++;
 
        while (S.size() && inter - last >= 1) rs += S.top(), S.pop(), inter--;
 
        last = cp;
    }
 
    cout << rs;
    return 0;
}