Cod sursa(job #1968929)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 18 aprilie 2017 00:00:32
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax=100000+5;
int a[Nmax],b[Nmax],n,len,poz[Nmax],par[Nmax];
int caut_bin(int x)
{
    int hi=len,lo=-1,mid;
    while(hi-lo>1)
    {
        mid=lo+(hi-lo)/2;
        if(b[mid]>=x)hi=mid;
        else lo=mid;
    }
    if(b[hi]<x)return hi+1;
    else return lo+1;
}
void print_sol(int lent,int prev)
{
    if(lent>1)
        print_sol(lent-1,par[prev]);
    fout<<a[prev]<<" ";
}
int main()
{
    int k;
    fin>>n;
    for(int i = 1 ;i <= n ; ++i)fin>>a[i];
    for(int i = 1,p;i <= n; ++i)
    {
        p=caut_bin(a[i]);
        b[p]=a[i];
        if(p>len)len++;
        poz[p]=i;
        if(p>0)par[i]=poz[p-1];
    }
    fout<<len<<'\n';
    print_sol(len,poz[len]);
    return 0;
}