Cod sursa(job #2166391)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 13 martie 2018 16:53:43
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100010],ant[100010],poz[100010],ok,n,i,j,k,s,d,mij;
void afisare(int q)
{
    if(q!=0)
    {
        afisare(ant[q]);
        fout<<a[q]<<' ';
    }
}
int main()
{
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>a[i];
    k=1;
    poz[1]=1;
    ant[1]=0;
    for(i=2; i<=n; i++)
    {
        if(a[i]>a[poz[k]])
        {
            k++;
            poz[k]=i;
            ant[i]=poz[k-1];
        }
        else
        {
            if (a[poz[1]]>=a[i])
            {
                poz[1]=i;
                ant[i]=0;
            }
            else
            {
                s=2;
                d=k;
                ok=0;
                while(s<=d&&ok==0)
                {
                    mij=(d-s)/2+s;
                    if(a[i]>a[poz[mij-1]]&&a[i]<=a[poz[mij]])
                    {
                        poz[mij]=i;
                        ant[i]=poz[mij-1];
                        ok=1;
                    }
                    else
                    {
                        if(a[i]<a[poz[mij]])
                            d=mij-1;
                        else
                            s=mij+1;
                    }
                }
            }
        }
    }
    fout<<k<<'\n';
    afisare(poz[k]);

}