Cod sursa(job #3200289)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 4 februarie 2024 11:14:03
Problema Subsir 2 Scor 45
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <algorithm>
#include <climits>

using namespace std;

ifstream f("subsir2.in");
ofstream g("subsir2.out");

long long n, maxi[5005], a[5005], k;
long long dp[5005], v[5005], fr[5005];

int main()
{
    f >> n;
    for(long long i = 1; i <= n; i ++)
        f >> a[i];

    for(long long i = 1; i <= n; i ++)
    {
        long long p = upper_bound(maxi + 1, maxi + k + 1, a[i]) - maxi;
        if(p > k)
        {
            k ++;
            fr[k] = i;
        }

        maxi[p] = a[i];
        dp[i] = p;
    }

    g << k << '\n';

    long long u = LONG_LONG_MAX; v[k + 1] = n;
    for(long long i = k; i >= 1; i --)
    {
        long long mini = LONG_LONG_MAX, poz;

        for(long long j = v[i + 1]; j >= fr[i - 1]; j --)
            if(dp[j] == i && mini > a[j] && u >= a[j])
            {
                mini = a[j];
                poz = j;
            }

        v[i] = poz;
    }

    for(long long i = 1; i <= k; i ++)
        g << v[i] << " ";
    return 0;
}