Cod sursa(job #1967958)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 17 aprilie 2017 12:55:53
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1 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,ind[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;
}
int main()
{
    fin>>n;
    for(int i = 1 ;i <= n ; ++i)fin>>a[i];
    b[1]=a[1];ind[1]=1;len=1;
    for(int i = 2,poz;i <= n; ++i)
    {
        poz=caut_bin(a[i]);
        if(poz==-1 || poz==0)
        {
            if(b[1]>a[i])
            {
                b[1]=a[i];
                ind[1]=i;
            }
        }
        else if(b[poz]>a[i] || b[poz]==0)
        {
            b[poz]=a[i];
            ind[poz]=i;
            if(poz>len)++len;
        }
    }
    fout<<len<<'\n';
    int k=1;
    while(k<=len)
    {
        fout<<a[ind[k]]<<" ";
        k++;
    }
    return 0;
}