Pagini recente » Cod sursa (job #2523792) | Cod sursa (job #167003) | Cod sursa (job #2918503) | Cod sursa (job #23961) | Cod sursa (job #2824265)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("carnati.in");
ofstream fout("carnati.out");
struct client {
int timp, val;
}v[2005], h[2005];
int n, k, c[1505], maxt = -1, ans;
void mergesort(int st, int dr)
{
if(st == dr)
return;
int med = (st + dr) / 2;
mergesort(st, med);
mergesort(med + 1, dr);
int i = st, j = med + 1, k = st;
while(i <= med || j <= dr)
{
if(j > dr || (i <= med && v[i].val > v[j].val))
h[k++] = v[i++];
else
h[k++] = v[j++];
}
for(i = st; i <= dr; i++)
v[i] = h[i];
}
int calc(int pret)
{
int a, dp = 0, sol = -0x3f3f3f3f;
for(int i = 1; i <= maxt; i++)
{
a = c[i] * pret - k;
dp = max(dp + a, a);
sol = max(sol, dp);
}
return sol;
}
int main()
{
fin >> n >> k;
for(int i = 1; i <= n; i++)
{
fin >> v[i].timp >> v[i].val;
maxt = max(maxt, v[i].timp);
}
mergesort(1, n);
for(int i = 1; i <= maxt; i++)
c[i] = 0;
for(int i = 1; i <= maxt; i++)
{
c[v[i].timp]++;
ans = max(ans, calc(v[i].val));
}
fout << ans;
return 0;
}