Cod sursa(job #206796)
#include <stdio.h>
#include <vector>
using namespace std;
#define maxn 2010
#define maxx 1510
#define max(a,b) (a > b ? a : b)
int n, c, sol;
int a[maxn], b[maxn];
vector <int> v[maxx];
int g[maxx];
int main()
{
freopen("carnati.in", "r", stdin);
freopen("carnati.out", "w", stdout);
scanf("%d %d ", &n, &c);
int i, j, k, sum;
for (i=1; i<=n; i++) scanf("%d %d ", &a[i], &b[i]);
for (i=1; i<=n; i++) v[a[i]].push_back(b[i]);
for (i=0; i<maxx; i++) g[i] = v[i].size();
for (i=1; i<=n; i++)
{
sum = 0;
for (j=0; j<maxx; j++)
{
for (k=0; k<g[j]; k++)
if (v[j][k] >= b[i]) sum += b[i];
sum -= c;
if (sum < 0) sum = 0;
sol = max(sol, sum);
}
}
printf("%d\n", sol);
return 0;
}