Cod sursa(job #2730254)

Utilizator emanuel2186Lugojan Emanuel emanuel2186 Data 25 martie 2021 23:44:08
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int L[Nmax];
int v[Nmax];
int N;
int minim[Nmax];
int scor;
void afisare()
{
    fout<<L[N]<<"\n";
    for(int i=1; i<=L[N]; i++)
        fout<<maxim[i]<<" ";
}
void rezolvare()
{
    int caut = L[N];
    for(int i=1; i<=caut; i++)
        maxim[i] = -1;
    maxim[ caut + 1 ] = INT_MAX;
    for(int i=N; i>=1; i--)
    {
        if(L[i] == caut - 1)
        {
            caut--;
        }
        if(v[i] > maxim[caut] && v[i] < maxim[caut + 1])
        {
            maxim[caut] = v[i];
        }
    }
    afisare();
}
void initializare()
{
    for(int i=1; i<=N; i++)
        minim[i] = INT_MAX;

    ///minim[0] = 0;
}
void update(int x, int i)
{
    for(int j = scor; j>=0; j--)
    {
        if(x > minim[j])
        {
            if(x <= minim[j + 1])
            {
                minim[j + 1] = x;
                if(j + 1 > scor)
                    scor++;
                L[i] = j + 1;
                break;
            }

        }
    }
}
void citire()
{
    fin>>N;
    initializare();
    for(int i=1; i<=N; i++)
    {
        fin>>v[i];
        if(i == 1)
        {
            scor++;
            minim[1] = v[i];
            L[1] = 1;
        }
        else
            update(v[i], i);
    }
    rezolvare();
}
int main()
{
    citire();
    return 0;
}