Pagini recente » Cod sursa (job #2827683) | Cod sursa (job #347269) | Cod sursa (job #315586) | Cod sursa (job #1545458) | Cod sursa (job #139258)
Cod sursa(job #139258)
#include <stdio.h>
#include <fstream>
#include <set>
#include <utility>
using namespace std;
#define in "carnati.in"
#define out "carnati.out"
#define dim 2001
int N, C;
int P[dim], T[dim], A[dim];
set< pair<int,int> > G;
set< pair<int,int> >::iterator it;
int Solve(int);
inline int Maxim(int a, int b) {
if ( a > b ) return a;
return b;
}
int main()
{
int X, Y;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &C);
for ( int i = 1; i <= N; i++ )
scanf("%d%d", &X, &Y), G.insert( make_pair(X,Y) );
int k = 0;
for ( it = G.begin(); it != G.end(); it++ )
k++, T[k] = it->first, P[k] = it->second;
int maxim = 0;
for ( int i = 1; i <= N; i++ )
{
if ( maxim < Solve(P[i]) ) maxim = Solve(P[i]);
}
printf("%d\n", maxim);
}
int Solve(int M)
{
int K = 0, timp;
memset(A,0,sizeof(A));
if ( P[1] >= M ) A[1] = M-C;
else A[1] = 0;
for ( int i = 2; i <= N; i++ )
{
if ( P[i] >= M )
{
A[i] = M-C;
if ( A[i] < A[i-1] - (T[i]-T[i-1])*C + M ) A[i] = A[i-1] - (T[i]-T[i-1])*C + M;
}
else if ( A[i] < A[i-1] - (T[i]-T[i-1])*C ) A[i] = A[i-1] - (T[i]-T[i-1])*C;
if ( K < A[i]-C ) K = A[i];
}
return K;
}