Cod sursa(job #1776494)

Utilizator Malan_AbeleMalan Abele Malan_Abele Data 11 octombrie 2016 13:30:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,v[100004],i;
int p[100004]/*elemente*/,c[100004]/*pozitii*/,nr;
int sol[100004];

int caut_bin(int st, int dr){
    int mj=st+(dr-st)/2;
    if(dr<st)
        return -1;
    if(p[mj]>v[i]){
        if(p[mj-1]<v[i])
            return mj;
        else
            return caut_bin(st,mj-1);
    }
    else
        return caut_bin(mj+1,dr);
}

int main()
{
    in>>n;
    for(i=1;i<=n;++i)
        in>>v[i];
    nr=1;
    p[1]=v[1];
    c[1]=1;
    for(i=2;i<=n;++i){
        if(v[i]<p[1]){
            p[1]=v[i];
            c[i]=1;
        }
        else if(v[i]>p[nr]){
            ++nr;
            p[nr]=v[i];
            c[i]=nr;
        }
        else{
            int poz=caut_bin(1,nr);
            if(poz!=-1){
                p[poz]=v[i];
                c[i]=poz;
            }
        }
    }
    out<<nr<<"\n";

    int aux=nr;
    for(i=n;i>=1;--i)
        if(c[i]==aux){
            sol[aux]=v[i];
            --aux;
        }
    for(i=1;i<=nr;++i)
        out<<sol[i]<<" ";
    return 0;
}