Cod sursa(job #2341412)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 11 februarie 2019 19:56:55
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,V[Dim],Q[Dim],P[Dim],A[Dim];
int k,lg,cnt=1,rep;


int main()
{
    f>>N;
    for(int i=1;i<=N;i++) f>>V[i];
    lg=1;
    Q[1]=V[1];
    P[1]=1;
    for(int i=2;i<=N;i++)
    {
       int st=1,dr=lg;
       int gasit=-1;
       while(st<=dr)
       {
           int mij=(st+dr)/2;
           if(V[i]<=Q[mij])
           {
               gasit=mij;
               dr=mij-1;
           }
           else
           st=mij+1;
       }
       if(gasit==-1)
       {
           lg++;
           Q[lg]=V[i];
           P[++cnt]=lg;
       }
       else
       {
           Q[gasit]=V[i];
           P[++cnt]=gasit;
       }
    }
    g<<lg<<'\n';
    rep=lg;
    for(int i=cnt;i>=1&&rep>=1;i--)
    {
        if(P[i]==rep)
        {
            rep--;
            A[++k]=i;
        }
    }
    for(int i=k;i>=1;i--)
        g<<V[A[i]]<<" ";
    return 0;
}