Cod sursa(job #1789168)

Utilizator Chirita_MateiChirita Matei Chirita_Matei Data 26 octombrie 2016 19:08:39
Problema Subsir crescator maximal Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <algorithm>

using namespace std;
ofstream fout("scmax.out");
ifstream fin("scmax.in");

struct raspuns{
    int nr, poz;
}a[100005],v[100005];

int n,x,mij,st,dr,k,ult_poz,l[100005],k1,poz;

int main()
{
    fin>>n;

    for(int i=1;i<=n;++i)
    {
        fin>>x;
        a[i].nr=x;

        if(i==1)
        {
            v[++k].nr=x;
            v[k].poz=i;
            a[i].poz=0;
        }

        else if(x>v[k].nr)
        {
            v[++k].nr=x;
            v[k].poz=i;
            a[i].poz=v[k-1].poz;
        }

        else
        {
            st=1;
            dr=k;

            while(st<=dr)
            {
                mij=(st+dr)/2;

                if(x>mij)
                {
                    st=mij+1;
                }

                else if(x<mij)
                {
                    dr=mij-1;
                }

                else
                {
                    dr=mij;
                    break;
                }
            }

            a[i].poz=a[v[dr].poz].poz;
            v[dr].nr=x;
            v[dr].poz=i;
        }
    }

    fout<<k<<'\n';

    l[1]=v[k].nr;
    k1=1;
    poz=v[k].poz;

    while(poz!=0)
    {
        poz=a[poz].poz;
        l[++k1]=a[poz].nr;
    }

    for(int i=k1-1;i>=1;i--)
    {
        fout<<l[i]<<' ';
    }

    return 0;
}