Pagini recente » Cod sursa (job #2465732) | Cod sursa (job #2584476) | Cod sursa (job #263005) | Cod sursa (job #265789) | Cod sursa (job #335331)
Cod sursa(job #335331)
#include <stdio.h>
#define DIM 100101
struct nod {
long long inf;
nod *adr;
};
nod *T[DIM],*q;
long long H[2*DIM];
long long dH,N,X,D,A,L,S,t,i;
void baga(int x){
long long c,p,aux;
H[++dH] = x;
c = dH;
p = c/2;
while(p && H[p]<H[c]) {
aux = H[p];
H[p] = H[c];
H[c] = aux;
c = p;
p = c/2;
}
}
void scoate(){
H[1] = H[dH];
dH--;
long long p = 1;
long long c = 2;
long long aux;
while (c<=dH) {
if (c+1 <= dH && H[c]>H[c+1])
c++;
if (H[c]<H[p]) {
aux = H[p];
H[p] = H[c];
H[c] = aux;
p = c;
c = 2*p;
} else break;
}
}
int main(){
FILE *f = fopen("lupu.in","r");
fscanf(f,"%lld %lld %lld", &N, &X, &L);
for (i=1;i<=N;i++) {
fscanf(f,"%lld %lld",&D, &A);
if (D>X)
t = N+2;
else if ((X-D)/L>=N)
t = N-1;
else
t = (X-D)/L;
if (t<N) {
q = new nod;
q->inf = A;
q->adr = T[t];
T[t] = q;
}
}
fclose(f);
for (i=N-1;i>=0;i--) {
q = T[i];
while (q) {
baga(q->inf);
q = q->adr;
}
if (dH!=0) {
S+=H[1];
scoate();
}
}
FILE *g = fopen("lupu.out","w");
fprintf(g,"%lld",S);
fclose(g);
return 0;
}