Cod sursa(job #788988)

Utilizator nicu701Nicu Badescu nicu701 Data 16 septembrie 2012 14:22:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
using namespace std;
fstream f("scmax.in", ios::in),
        g("scmax.out", ios::out);
int s[100001], v[100001], l[100001], n, m;

int BinarySearch(int st, int dr, int value)
{
    int mid=(st+dr)/2;
    if(st<=dr)
    {


    if(s[mid]==value)
        return mid;
    else if(s[mid]>value)
        return BinarySearch(st, mid-1, value);
        else if(s[mid]<value)
            return BinarySearch(mid+1, dr, value);
    }
    else
        return st;


}

void Print(int i, int max)
{
    if(!max)
        return;
    else{


    if(l[i]==max)
    {
        Print(i-1, max-1);
        g<<v[i]<<" ";
    }
    else
        Print(i-1, max);
    }


}

int main()
{
    int i,j,poz, max;
    max=-1;
    f>>n;
    m=0;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        if(m==0)
        {
            m++;
            s[m]=v[i];
            l[i]=m;
        }
        else
        {
            poz=BinarySearch(1, m, v[i]);
            s[poz]=v[i];
            l[i]=poz;
            if(poz>m)
                m=poz;
        }
        if(l[i]>=max)
            max=l[i];
    }
    g<<max<<endl;
    Print(n, max);
    return 0;
}