Cod sursa(job #1623713)

Utilizator KOzarmOvidiu Badea KOzarm Data 1 martie 2016 21:10:31
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int in,fi,mid,p,b[100005],k,n,i,x;
struct el
{
    int a,b;
}a[100005];
void afisare(int x)
{
    if(a[x].b!=0)
        afisare(a[x].b);
    fout<<a[x].a<<" ";
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i].a;
        p=k+1;
        in=1;fi=k;
        while(in<=fi)
        {
            mid=(in+fi)/2;
            if(a[b[mid]].a>a[i].a)
            {
                p=mid;
                b[mid]=i;
                fi=mid-1;
            }
            else
            if(a[b[mid]].a==a[i].a)
            {
                p=0;
                fi=0;
            }
            else
                in=mid+1;
        }
        if(p==k+1)
        {
            k++;
            b[k]=i;
            a[i].b=b[k-1];
        }
        else
        if(p>0)
        {
            b[p]=i;
            a[i].b=b[p-1];
        }
    }
    fout<<k<<"\n";
    afisare(b[k]);
    return 0;
}