Cod sursa(job #1915881)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 martie 2017 22:57:22
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fi("carnati.in");
ofstream fo("carnati.out");

using i64 = long long;

const int NMAX = 2048;

struct Man {
    int t, p; };

int n, c;
i64 ant, s;

Man v[NMAX];
i64 ssm[NMAX];

int main() {
    int mn = 1e9, mx = -1e9;

    ant = 0;

    fi >> n >> c;
    for (int i = 0; i < n; ++i) {
        fi >> v[i].t >> v[i].p;
        mn = min(v[i].t, mn);
        mx = max(v[i].t, mx); }

    sort(v, v + n, [](const Man &a, const Man &b) { return a.p < b.p; });

    for (int i = 0; i < n; ++i) {
        if (i > 0 && v[i].p == v[i - 1].p)
            continue;

        memset(ssm, 0x00, sizeof ssm);
        for (int j = mn; j <= mx; ++j)
            ssm[j] = -c;
        for (int j = n - 1; j > 0 && v[j].p >= v[i].p; --j)
            ssm[v[j].t]+= v[i].p;

        s = 0;
        for (int j = mn; j <= mx; ++j) {
            s = max(0LL, s + ssm[j]);
            ant = max(ant, s); } }

    fo << ant << '\n';

    return 0; }