Pagini recente » Cod sursa (job #3124464) | Cod sursa (job #1684992) | Cod sursa (job #1381184) | Cod sursa (job #2552314) | Cod sursa (job #261312)
Cod sursa(job #261312)
#include<stdio.h>
#define max(a,b) (a>b?a:b)
FILE *fin=fopen("carnati.in","r"),
*fout=fopen("carnati.out","w");
int N,C,T[2555],P[2555],A[2555],maxim;
void swap(int i,int j){
T[i]^=T[j];T[j]^=T[i];T[i]^=T[j];
P[i]^=P[j];P[j]^=P[i];P[i]^=P[j];
}
int main(){
fscanf(fin,"%d %d",&N,&C);
for(int i=1;i<=N;i++){
fscanf(fin,"%d %d",&T[i],&P[i]);
int j=i;
while(j/2 && T[j/2]<T[j]){
swap(j,j/2);
j/=2;
}
}
int Nh=N;
while(Nh>1){
swap(1,Nh);
--Nh;
int i=1,j;
while(1){
j=2*i;
if(j>Nh) break;
if(j+1<=Nh && T[j+1]>T[j]) ++j;
if(T[j]<T[j/2]) break;
swap(j,j/2);
i=j;
}
}
int G;
// T[0]=-2000000;
for(int i=1;i<=N;i++){
G=P[i];
if(G-C>0)
for(int j=1;j<=N;j++){
if(G<=P[j])
A[j]=max(A[j-1]-(T[j]-T[j-1])*C+G,G-C);
else
A[j]=max(A[j-1]-(T[j]-T[j-1])*C,0);
maxim=max(maxim,A[j]);
}
else
maxim=max(maxim,0);
}
fprintf(fout,"%d\n",maxim);
fclose(fin);
fclose(fout);
return 0;
}