Cod sursa(job #1525949)

Utilizator VictoriaNevTascau Victoria VictoriaNev Data 15 noiembrie 2015 18:51:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;
const int NMAX=100001;
int i, j, n, nr, s, pos, d[NMAX], v[NMAX], x[NMAX], ln[NMAX];

ifstream in("scmax.in");
ofstream out("scmax.out");
void write(int i)
{
    if(x[i]>0)write(x[i]);
    out<<v[i]<<' ';
}
int bs(int x)
{
    int l, r, mid;
    l=0;
    r=nr;
    mid=(l+r)/2;
    while(l<=r)
    {
        if(v[ln[mid]]<x&&v[ln[mid+1]]>=x)
            return mid;
        else if(v[ln[mid+1]]<x)
        {
            l=mid+1;
            mid=(l+r)/2;
        }
        else
        {
            r=mid-1;
            mid=(l+r)/2;
        }
    }
    return nr;
}
int main()
{

    in>>n;
    nr=1;
    for(i=1; i<=n; i++)
        in>>v[i];
    d[1]=ln[1]=1;
    ln[0]=0;
    for(i=2; i<=n; i++)
    {
        pos=bs(v[i]);
        x[i]=ln[pos];
        d[i]=pos+1;
        ln[pos+1]=i;

        if(nr<pos+1)
            nr=pos+1;
    }
    int maxim=0;
    pos=0;
    for(i=1; i<=n; i++)
        if(maxim<d[i])
        {
            maxim=d[i];
            pos=i;
        }
    out<<maxim<<'\n';
    write(pos);
    return 0;
}