Cod sursa(job #2155439)

Utilizator sotoc1999Sotoc George sotoc1999 Data 7 martie 2018 20:47:47
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int v[100003],p[100003],c[100003],sol[100003];
int cautare_binara(int st,int dr,int i)
{
    int m=st+(dr-st)/2;
    if(st==dr)
        return st;
    else if(c[m]<v[i])
        return cautare_binara(m+1,dr,i);
    else
        return cautare_binara(st,m-1,i);
}
int main()
{
    int poz;
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    c[1]=v[1];
    p[1]=1;
    int nr=1;
    for(int i=1;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
        {
            //cauta cel mai mic element mai mare
            poz=cautare_binara(1,nr,i);
            c[poz]=v[i];
            p[i]=p[poz];
        }
    }
    int aux=nr;
    g<<nr<<"\n";
    for(int i=n;i>=1;i--)
    {
        if(p[i]==nr)
        {
            sol[nr]=v[i];
            nr--;
        }
    }
    for(int i=1;i<=aux;i++)
        g<<sol[i]<<" ";
    return 0;
}