Cod sursa(job #301676)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 8 aprilie 2009 12:56:51
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#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)   
        {   
        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;
        ++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;
}