Pagini recente » Cod sursa (job #2847882) | Cod sursa (job #2037186) | Cod sursa (job #1118138) | Cod sursa (job #2389440) | Cod sursa (job #322698)
Cod sursa(job #322698)
#include<stdio.h>
#include<string.h>
struct point
{
int x,y;
};
int n,c;
point v[2002];
void read()
{
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%d%d",&n,&c);
int i;
for(i=1;i<=n;i++)
scanf("%d%d",&v[i].x,&v[i].y);
}
int part(int st, int dr)
{
int i,j,m;
point aux,p;
m=(st+dr)>>1;
p=v[m];
i=st-1;
j=dr+1;
while(1)
{
do{++i;}while(v[i].x<p.x);
do{--j;}while(v[j].x>p.x);
if(i<j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
else
return j;
}
}
void quick(int st, int dr)
{
int p;
if(st<dr)
{
p=part(st,dr);
quick(st,p);
quick(p+1,dr);
}
}
inline int max(int a, int b)
{
if(a>b)
return a;
return b;
}
void rez()
{
int i,j,a[2002],g,maxim=0;
a[0]=v[0].x=-10;
for(j=1;j<=n;j++)
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
{
if(v[j].y<=v[i].y)
g=v[j].y;
else
g=0;
a[i]=max(a[i-1]-(v[i].x-v[i-1].x)*c+g,g-c);
if(a[i]>maxim)
maxim=a[i];
}
}
printf("%d\n",maxim);
}
int main()
{
read();
quick(1,n);
rez();
return 0;
}