Pagini recente » Cod sursa (job #533955) | Cod sursa (job #1711460) | Cod sursa (job #1354775) | Cod sursa (job #661933) | Cod sursa (job #3198595)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
const int LMAX = 100005;
priority_queue<int> Q;
struct interval{
int st, dr;
bool operator < (interval b) {
if (st < b.st) return true;
else if (st == b.st && dr > b.dr) return true;
return false;
}
}v[LMAX];
int main() {
int n, i, x, l, j;
fin>>n>>x>>l;
for (i = 0; i < n; i++) {
fin>>v[i].st>>v[i].dr;
v[i].st = (x - v[i].st)/l + 1; //dupa cate atacuri oaia iese din raza lupului
}
sort(v, v + n);
long long lana = 0; //distanta parcursa de oi
int currsizeQ;
i = 0;
while (i < n) {
currsizeQ = v[i].st;
int disp = currsizeQ - ((int)Q.size());
for (j = 0; j < disp && j+i < n && v[j + i].st == currsizeQ; j++) {
Q.push(-v[j + i].dr);
}
i += j;
while (i < n && v[i].st == currsizeQ) {
if (-Q.top() < v[i].dr) {
Q.pop();
Q.push(-v[i].dr);
}
i++;
}
}
while (!Q.empty()) {
lana = lana - Q.top();
Q.pop();
}
fout<<lana;
fin.close();
fout.close();
return 0;
}