Cod sursa(job #2655192)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 3 octombrie 2020 15:50:20
Problema Carnati Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <algorithm>

using namespace std;

const int NMAX = 2000;
const int TMAX = 1500;

pair <int, int> v[1 + NMAX + 1];

int p[1 + TMAX];

bool functie(const pair<int, int> &a, const pair<int, int> &b)
{
    return a.first < b.first;
}

int main()
{
    ifstream in("carnati.in");
    ofstream out("carnati.out");
    int n, c;
    int maxim = 0;

    in >> n >> c;
    for (int i = 1; i <= n; i++)
    {
        in >> v[i].first >> v[i].second;
    }

    sort(v + 1, v + 1 + n, functie);
    v[n + 1].first = -1;

    int t_max = v[n].first;

    for (int i = 1; i <= n; ++i)
    {
       int pret_fixat = v[i].second;

       for (int j = 0, k = 1; j <= t_max; j++)
       {
         p[j] = p[j - 1] - c;

         while (v[k].first == j)
         {
           if (v[k].second >= pret_fixat)
           {
             p[j] += pret_fixat;
           }

           k++;
         }
       }

       int minim = p[0];

       for (int j = 0; j <= t_max; j++)
       {
         if (minim > p[j])
         {
           minim = p[j];
         }

         if (maxim < p[j] - minim)
         {
           maxim = p[j] - minim;
         }
       }
    }

    out << maxim << '\n';

    return 0;
}