Cod sursa(job #2562177)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 29 februarie 2020 12:38:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb

#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,A[Dim],Q[Dim],P[Dim],lg,cnt,S[Dim],kop;

int main()
{
    f>>N;
    for(int i=1;i<=N;i++) f>>A[i];

    Q[++lg]=A[1];
    P[++cnt]=1;
    for(int i=2;i<=N;i++)
    {
        int x=A[i];
        int st=1,dr=lg,poz=-1;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            if( x > Q[mij] ) st=mij+1;
            else
            {
                poz=mij;
                dr=mij-1;
            }
        }
        if( poz == -1 )
        {
            Q[++lg]=x;
            P[++cnt]=lg;
        }
        else
        {
            Q[poz]=x;
            P[++cnt]=poz;
        }
    }
    g<<lg<<'\n';
    for(int i=cnt;i>=1 && lg > 0 ;i--)
    {
        if(P[i]==lg)
        {
            lg--;
            S[++kop]=i;
        }
    }

    for(int i=kop;i>=1;i--)
    g<<A[S[i]]<<' ';

    return 0;
}