Cod sursa(job #2325397)

Utilizator Seba951Sebastian Boerescu Seba951 Data 22 ianuarie 2019 16:44:33
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

const int N=1000001;

int n,secv,maxi=1,p,l,j=1,m=1,L=17;
int v[N],lung[N],pred[N],aux[N];

void sir(int p)
{
    if(pred[p]!=0)
    {
        sir(pred[p]);
    }
    out<<v[p]<<" ";
}

int caut1(int v[], int n, int x)
{
   int pas=1<<L;
   int r=0;
   while(pas!=0)
   {
     if(r+pas<=m && v[aux[r+pas]]<x)
     r+=pas;
     pas/=2;
   }
   return r;
}

int main()
{
    in>>n;
    for(int i=1; i<=n; ++i) in>>v[i];
    m=1;
    aux[1]=1;
    pred[n]=-1;
    for(int i=2; i<=n; ++i)
    {
        j=caut1(v,m,v[i]);
        if(j==m) ++m;
        pred[i]=aux[j];
        aux[j+1]=i;
    }
    out<<m<<"\n";
    sir(aux[m]);
    return 0;
}