Cod sursa(job #1309048)

Utilizator Eman98Ghinea Mihail Emanuel Eman98 Data 5 ianuarie 2015 09:18:43
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
//Problema,folosind cautare binara
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,v[100003],best[100003],a[100003],maxim,k,b[100003],nr,i,j,poz;
void det(int i)
{
    if(a[i]!=0)
        det(a[i]);
    cout<<v[i]<<" ";
}
int bin(int i)
{
    int st,dr,mj;
    st=0;
    dr=nr;
    mj=(st+dr)/2;
    while(st<dr)
    {
        if (v[b[mj]]<i and v[b[mj+1]]>=i)
            return mj;
        else if(v[b[mj+1]]<i)
            st=++mj,mj=(st+dr)/2;
        else
            dr=--mj,mj=(st+dr)/2;
    }
    return nr;
}
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    nr=1;
    best[1]=b[1]=1;
    b[0]=0;
    for(i=2;i<=n;i++)
    {
        poz=bin(v[i]);
        a[i]=b[poz];
        best[i]=poz+1;
        b[poz+1]=i;
        nr=max(nr,poz+1);
    }
    maxim=0;
    poz=0;
    for(i=1;i<=n;i++)
        if(maxim<best[i])
            maxim=best[i],poz=i;
    cout<<maxim<<"\n";
    det(poz);
    return 0;
}