Pagini recente » Istoria paginii documentatie | Diferente pentru documentatie/textile intre reviziile 65 si 107 | Profil alexandru92 | Diferente pentru documentatie/textile intre reviziile 77 si 107 | Cod sursa (job #1749086)
#include<stdio.h>
#include<queue>
#include<algorithm>
#include<unistd.h>
FILE *in, *out;
using namespace std;
struct ovina
{
int lana, poz;
};
ovina grupu[100000];
bool compdis(ovina i, ovina j)
{
return i.poz < j.poz;
}
int main ()
{
int oi, dpas, dmax, i, prima;
long long s;
in = fopen("lupu.in", "r");
out = fopen("lupu.out", "w");
fscanf(in, "%d%d%d", &oi, &dmax, &dpas);
for(i = 0; i <= oi; i++) {
fscanf(in, "%d%d", &grupu[i].poz, &grupu[i].lana);
}
sort(grupu, grupu + oi, compdis);
/*
for(i = 0; i < oi; i++) {
printf("%2d ", grupu[i].poz);
} printf("\n");
for(i = 0; i < oi; i++) {
printf("%2d ", grupu[i].lana);
} printf("\n");
*/
priority_queue<int> leheap;
prima = dmax % dpas;
i = 0;
s = 0;
do {
//printf("%d ", prima);
while(i < oi && grupu[i].poz <= prima) {
leheap.push(grupu[i].lana);
//write(1, "caca", 4);
i++;
}
if(leheap.size() > 0) {
s = s + leheap.top();
leheap.pop();
}
//printf("%lld\n", s);
//fflush(stdout);
prima = prima + dpas;
}
while(prima <= dmax);
fprintf(out, "%lld", s);
fclose(in);
fclose(out);
return 0;
}