Pagini recente » Cod sursa (job #2228332) | Cod sursa (job #1025553) | Cod sursa (job #1817382) | Cod sursa (job #716884) | Cod sursa (job #301685)
Cod sursa(job #301685)
#include <stdio.h>
#define Nmax 2100
int n,x,y,rez,g,c;
struct a
{
int t,p;
}
v[Nmax];
inline int max(int a, int b) { return a>b?a:b; }
void qsort(int l, int r)
{
int i,j,x,y;
i=l;
j=r;
x=v[(l+r)>>1].t;
do
{
while ((v[i].t<x)&&(i<n)) ++i;
while ((x<v[j].t)&&(j>1)) --j;
if (i<=j)
{
if (v[i].t>v[j].t)
{
y=v[i].t;
v[i].t=v[j].t;
v[j].t=y;
y=v[i].p;
v[i].p=v[j].p;
v[j].p=y;
}
else
if (v[i].t==v[j].t && v[i].p>v[j].p)
{
y=v[i].p;
v[i].p=v[j].p;
v[j].p=y;
}
++i;
--j;
}
}
while (i<=j);
if (l<j) qsort(l,j);
if (i<r) qsort(i,r);
}
int main()
{
int i,j;
freopen("carnati.in","r",stdin);
//freopen("carnati.out","w",stdout);
scanf("%d %d", &n,&c);
for (i=1;i<=n;++i)
scanf("%d %d", &v[i].t,&v[i].p);
qsort(1,n);
for (i=1;i<=n;++i)
{
x=0;
for (j=1;j<=n;++j)
{
if (v[i].p<=v[j].p)
g=v[i].p;
else
g=0;
y=max(x-(v[j].t-v[j-1].t)*c+g,g-c);
rez=max(rez,y);
x=y;
}
}
printf("%ld", rez);
return 0;
}