Pagini recente » Cod sursa (job #970001) | Cod sursa (job #2550182) | Cod sursa (job #1492322) | Cod sursa (job #2486829) | Cod sursa (job #1416088)
#include <stdio.h>
#include <stdlib.h>
long long t[2001],p[2001],v[2001],f[2001],zz[2001];
void quicksort(long long p,long u,long long po[])
{
long long pivot,j,i,aux;
if(p<u)
{
pivot=t[(p+u)/2];
i=p;
j=u;
while(i<=j)
{
while(t[i]<pivot && i<u)
i++;
while(t[j]>pivot && j>p)
j--;
if(i<=j){
aux=t[i];
t[i]=t[j];
t[j]=aux;
aux=po[i];
po[i]=po[j];
po[j]=aux;
i++;
j--;
}
}
if(p<j)
quicksort(p,j,po);
if(i<u)
quicksort(i,u,po);
}
}
long long functie(long long i,long long j)
{
long long m,max=0,sum=0;
for(m=j; m>=i; m--)
if(p[m]>=p[j])
sum+=p[j];
if(sum>zz[j-1]+f[j-1]*(p[j]>=f[j-1]))
{
max=sum;
f[j]=p[j];
}
else
{
max=zz[j-1]+f[j-1]*(p[j]>=f[j-1]);
f[j]=f[j-1];
}
return max;
}
int main()
{
long long i,n,max,z,c;
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%lld%lld",&n,&c);
for(i=1; i<=n; i++)
scanf("%lld%lld",&t[i],&p[i]);
quicksort(1,n,p);
max=p[1]-c;
v[1]=1;
f[1]=p[1];
zz[1]=p[1];
for(i=2; i<=n; i++)
{
z=functie(v[i-1],i);
if(p[i]-c<=z-c*(t[i]-t[v[i-1]]+1)){
v[i]=v[i-1];
zz[i]=z;
if(z-c*(t[i]-t[v[i-1]]+1)>max)
max=z-c*(t[i]-t[v[i-1]]+1);
}
else
{
v[i]=i;
f[i]=p[i];
zz[i]=p[i];
if(p[i]-c>max)
max=p[i]-c;
}
}
printf("%lld\n",max);
return 0;
}