Cod sursa(job #2824265)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 31 decembrie 2021 20:17:23
Problema Carnati Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#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;
}