Cod sursa(job #2670383)

Utilizator trifangrobertRobert Trifan trifangrobert Data 9 noiembrie 2020 19:45:05
Problema Orase Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

const int MMAX = 1e6 + 5;
const int INF = (1 << 30);

int main()
{
    ifstream fin("orase.in");
    ofstream fout("orase.out");
    int M, N;
    fin >> M >> N;
    vector <pair <int, int>> city(N);
    for (int i = 0;i < N;++i)
    {
        int d, l;
        fin >> d >> l;
        city[i] = make_pair(d, l);
    }
    sort(city.begin(), city.end());
    int answer = -INF;
    vector <int> best(M + 1, -INF);
    for (int i = 0, j = 0;i < N;i = j)
    {
        int mx = -INF;
        while (j < N && city[i].first == city[j].first)
        {
            if (mx != -INF)
                answer = max(answer, city[j].second + mx);
            mx = max(mx, city[j].second);
            ++j;
        }
        best[city[i].first] = mx;
    }
    vector <int> dp(M + 1, -INF);
    for (int i = 0;i <= M;++i)
    {
        if (i > 0 && dp[i - 1] != -INF)
            dp[i] = dp[i - 1] + 1;
        if (best[i] != -INF && i > 0 && dp[i - 1] != -INF)
            answer = max(answer, dp[i - 1] + 1 + best[i]);
        dp[i] = max(dp[i], best[i]);
    }
    fout << answer << "\n";
    fin.close();
    fout.close();
    return 0;
}