Cod sursa(job #2730267)

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