Cod sursa(job #1288776)

Utilizator Mihai_BogdanDumitru Mihai Mihai_Bogdan Data 9 decembrie 2014 03:19:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
using namespace std;
int n,m,i,j,l[100001],p[100001],t[100001],v[100001],poz,maxim,nr;
ifstream f("scmax.in");
ofstream g("scmax.out");
void afis(int i)
{
    if(p[i]!=0)
        afis(p[i]);
    g<<v[i]<<" ";
}
int caut(int x)
{
    int st,dr,m;
    st=0;
    dr=nr;
    m=(st+dr)/2;
    while(st<=dr)
    {
        if(v[l[m]]<x&&v[l[m+1]]>=x)
            return m;
        else
            if(v[l[m]]<x)
                st=m+1,m=(st+dr)/2;
            else
                dr=m-1,m=(st+dr)/2;
    }
    return nr;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    nr=l[1]=t[1]=1;
    for(i=2;i<=n;i++)
    {
        poz=caut(v[i]);
        t[i]=poz+1;
        l[poz+1]=i;
        p[i]=l[poz];
        if(poz+1>nr)
            nr=poz+1;
    }
    poz=1;
    maxim=t[1];
    for(i=2;i<=n;i++)
        if(t[i]>maxim)
        {
            maxim=t[i];
            poz=i;
        }
        g<<maxim<<"\n";
        afis(poz);
        return 0;
}