Pagini recente » Cod sursa (job #2865476) | Cod sursa (job #1957113) | Cod sursa (job #724178) | Monitorul de evaluare | Cod sursa (job #2697824)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 2000
int v[2][MAXN + 1], smax[MAXN + 1];
void swap(int i, int j){
int aux;
aux = v[0][i];
v[0][i] = v[0][j];
v[0][j] = aux;
aux = v[1][i];
v[1][i] = v[1][j];
v[1][j] = aux;
}
void quicksort(int min, int max){
int b, e, piv;
piv = v[0][(min + max) / 2];
b = min;
e = max;
while(piv > v[0][b]){
b++;
}
while(piv < v[0][e]){
e--;
}
while(b < e){
swap(b, e);
do{
b++;
}while(piv > v[0][b]);
do{
e--;
}while(piv < v[0][e]);
}
if(min < e){
quicksort(min, e);
}
if((e + 1) < max){
quicksort(e + 1, max);
}
}
int main()
{
FILE *fin, *fout;
int n, c, i, j, min, max, s, maxsubs, out;
fin = fopen("carnati.in", "r");
fscanf(fin, "%d%d", &n, &c);
for(i = 1; i <= n; i++){
fscanf(fin, "%d%d", &v[0][i], &v[1][i]);
}
fclose(fin);
quicksort(1, n);
j = 0;
min = 1000000;
out = 0;
for(i = 1; i <= n; i++){
max = smax[i - 1] - (v[0][i] - v[0][i - 1]) * c;
if(min <= v[1][i]){
max += min;
}
s = maxsubs = v[1][i] - c;
for(j = i - 1; 0 < j; j--){
s = s - (v[0][j + 1] - v[0][j]) * c;
if(v[1][i] <= v[1][j]){
s = s + v[1][i];
}
if(maxsubs < s){
maxsubs = s;
}
}
if(max < maxsubs){
max = maxsubs;
min = v[1][i];
}
smax[i] = max;
if(out < smax[i]){
out = smax[i];
}
}
fout = fopen("carnati.out", "w");
fprintf(fout, "%d", out);
fclose(fout);
return 0;
}