Cod sursa(job #2466495)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 2 octombrie 2019 13:11:54
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("lupu.in");
ofstream g("lupu.out");

struct nod {
  int dist, val;
};

int N, X, L;
long long sol;
nod a[100003];
priority_queue<int> Q;

bool cmp(nod a, nod b) {
  return a.dist > b.dist;
}
int main()
{
    f >> N >> X >> L;
    for(int i = 1; i <= N; i++) {
      f >> a[i].dist >> a[i].val;
      if(X < a[i].dist) a[i].dist = 0;
      else a[i].dist = ((X - a[i].dist) / L) + 1;
    }
    sort(a + 1, a + N + 1, cmp);
    int k = a[1].dist;
    for(int i = 1; i <= N && k; k--) {
      while(k == a[i].dist && i <= N) {
        Q.push(a[i].val);
        i++;
      }
      if(!Q.empty()) sol += Q.top(), Q.pop();
      else k = a[i].dist + 1;
    }
    g << sol << '\n';
    return 0;
}