Cod sursa(job #1777119)

Utilizator sotoc1999Sotoc George sotoc1999 Data 12 octombrie 2016 08:12:42
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#define L 100000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,nr,v[L+5],p[L+5],c[L+5],sol[L+5];
int m,i;
int cautare(int st,int dr)
{
    m=st+(dr-st)/2;
    if(c[m]<v[i])
    {
        return cautare(m+1,dr);
    }
    else if(c[m]>v[i])
    {
        if(c[m-1]>v[i])
            return cautare(st,m-1);
        else
            return m;
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    c[1]=v[1];
    p[1]=1;
    nr=1;
    int poz;
    for(i=2;i<=n;i++)
    {
        if(v[i]<=c[1])
        {
            c[1]=v[i];
            p[i]=1;
        }
        else if(v[i]>c[nr])
        {
            nr++;
            c[nr]=v[i];
            p[i]=nr;
        }
        else
        {
            poz=cautare(1,nr);
            p[i]=poz;
            c[poz]=v[i];
        }
    }
    i=n;
    g<<nr<<"\n";
    int aux=nr;
    while(i>=1)
    {
        if(nr==p[i])
        {
            sol[nr]=v[i];
            nr--;
        }
        i--;
    }
        for(i=1;i<=aux;i++)
        {
            g<<sol[i]<<" ";
        }
        g<<"\n";

    return 0;
}