Pagini recente » Cod sursa (job #326236) | Cod sursa (job #2929782) | Borderou de evaluare (job #1058859) | Cod sursa (job #728494) | Cod sursa (job #326272)
Cod sursa(job #326272)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX_N 2048
#define inf 2147000000
int n, m, c, sol = -inf;
struct customer {
int t;
int c;
} V[MAX_N];
int A[MAX_N];
inline int cmp(customer P, customer Q) {
return P.t < Q.t;
}
void cit() {
freopen("carnati.in", "r", stdin);
freopen("carnati.out", "w", stdout);
scanf("%d %d", &n, &c);
for (int i = 1; i <= n; i++)
scanf("%d %d", &V[i].t, &V[i].c);
sort(V + 1, V + n + 1, cmp);
}
void ssm() {
int sum = 0;
for (int i = 1; i <= m; i++) {
sum += A[i];
if (sum > sol) sol = sum;
if (sum < 0) sum = 0;
}
}
void solve() {
//fixez pretul carnatilor pe rand pretul fiecarui carnat
for (int i = 1; i <= n; i++) { //carnatii vor avea pretul V[i].c
m = 0;
int j = 1;
while (j <= n) {
int k = j;
A[++m] = -c;
if (V[j].c >= V[i].c) A[m] += V[i].c;
while (V[k].t == V[k + 1].t && k < n) {
k++;
if (V[k].c >= V[i].c) A[m] += V[i].c;
}
if (k < n)
A[++m] = -(V[k + 1].t - V[k].t - 1) * c;
j = k + 1;
}
ssm();
}
printf("%d\n", sol);
}
int main() {
cit();
solve();
return 0;
}