Pagini recente » Cod sursa (job #223815) | Cod sursa (job #675071) | Cod sursa (job #1856186) | Cod sursa (job #277595) | Cod sursa (job #1561898)
#include <cstdio>
#define MAXN 2001
#define INF 2000000000
int timp[MAXN],cost[MAXN],profit[MAXN],poz[MAXN],pret[MAXN];
inline void swap(int b,int e,int *v){
int aux=v[b];
v[b]=v[e];
v[e]=aux;
}
void myqsort(int begin,int end){
int b=begin,e=end,pivot=timp[(b+e)/2];
while(b<=e){
while(timp[b]<pivot) b++;
while(timp[e]>pivot) e--;
if(b<=e){
swap(b,e,timp);
swap(b,e,cost);
b++;e--;
}
}
if(begin<e) myqsort(begin,e);
if(b<end) myqsort(b,end);
}
int main(){
FILE*fi,*fout;
int i,j,n,m,max,pmax,con,nr,c;
fi=fopen("carnati.in" ,"r");
fout=fopen("carnati.out" ,"w");
fscanf(fi,"%d%d" ,&n,&c);
for(i=1;i<=n;i++)
fscanf(fi,"%d%d" ,&timp[i],&cost[i]);
myqsort(1,n);
pmax=-INF;
for(i=1;i<=n;i++){
j=i;
con=max=0;
while(j>0){
if(cost[j]>=cost[i])
con++;
if(con*cost[i]-(timp[i]-timp[j]+1)*c>max)
max=con*cost[i]-(timp[i]-timp[j]+1)*c;
j--;
}
nr=profit[i-1]-c*(timp[i]-timp[i-1]);
if(pret[i-1]<=cost[i])
nr+=pret[i-1];
if(max<nr){
pret[i]=pret[i-1];
profit[i]=nr;
}
else{
profit[i]=max;
pret[i]=cost[i];
}
if(pmax<profit[i])
pmax=profit[i];
}
fprintf(fout,"%d" ,pmax);
fclose(fi);
fclose(fout);
return 0;
}