Cod sursa(job #1739809)

Utilizator andrei_uAndrei andrei_u Data 10 august 2016 12:06:31
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,m[100001],p[100001],k[100001],a[100001],nr,poz;
int cauta(int poz)
{
    int l=1;
    int r=nr;
    int mid=1;
    while(l<=r)
    {
        mid=(l+r)/2;

        if(a[poz]<m[mid]) r=l-1;
        else r=l+1;
    }

    return l;
}

void print(int i)
{
    if(i==0) return;
    print(p[i]);
    fout<<a[i]<<" ";
}
int main()
{
    fin>>n; fin>>a[1];
    m[1]=a[1];
    p[1]=0;
    k[1]=1;

    for(i=2;i<=n;++i)
    {
        fin>>a[i];

    }


    nr=1;


     for(i=2;i<=n;++i)
    {
        if(a[i]>m[nr]){++nr; m[nr]=a[i]; p[i]=k[nr-1]; k[nr]=i;}

        else if(a[i]!=m[nr])
        {


        poz=cauta(i);
        m[poz]=a[i];
        p[i]=k[nr-1];
        k[nr]=i;
       }
    }

    print (k[nr]);


    return 0;
}