Cod sursa(job #2710208)

Utilizator MohneaGosuMihnea Gusu MohneaGosu Data 22 februarie 2021 10:15:55
Problema Carnati Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("carnati.in");
ofstream out ("carnati.out");
const int T=1501;
const int N=2001;
long long sume[T];
struct timp
{
    int t;
    int p;
};
timp v[N];
int c,n;
long long maxim=-2147483647;
bool compara(timp a,timp b)
{
    if (a.t==b.t) return a.p>b.p;
    return a.t<b.t;
}
void incearca (int pret)
{
    int i,j=0;
    sume[0]=0;
    sume[0]-=c;
    while (v[j].t==0 && v[j].p>=pret && j<n){
        sume[0]+=pret;
        j++;
    }
    maxim=max(maxim,sume[0]);
    for (i=1;i<T;i++){
        sume[i]=0;
        while (v[j].t<i && j<n){ j++;}
        sume[i]-=c;
        sume[i]+=max(sume[i-1],(long long)0);
        while (v[j].t==i && v[j].p>=pret && j<n){
            sume[i]+=pret;
            j++;
        }
        maxim=max(maxim,sume[i]);
    }
}
int main()
{
    int i;
    in>>n>>c;
    for (i=0;i<n;i++){
        in>>v[i].t>>v[i].p;
    }
    sort (v,v+n,compara);
    for (i=0;i<n;i++){
        incearca(v[i].p);
    }
    out<<maxim;
    return 0;
}