Cod sursa(job #2002192)

Utilizator gruhtenZinnenberg Gruhten gruhten Data 18 iulie 2017 22:58:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define dim 100001
//#define dim 11 //0010
using namespace std;

int n,A[dim],p[dim],poz,M[dim],k;
int i=1;
int mij,st,dr;

void afisare(int q){
    if (p[q])
      afisare(p[q]);
    cout<<A[q]<<" ";
}

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    cin>>n;
    for ( i=1; i<=n; i++)
        cin>>A[i];
    M[0]=0;
    k=0;
    for ( i=1; i<=n; i++)
    {
        st=1;
        dr=k;
        while (st<=dr)
        {
            mij=(st+dr)/2;
            if (A[i]>A[M[mij]])
              st=mij+1;
            else
              dr=mij-1;
        }
        p[i]=M[st-1];
        M[st]=i;
        if (st>k)
        {
           k=st; //k=nivelul maxim
           poz=i;  //tine minte pozitia celui mai puternic el.
        }
    }
    cout<<k<<"\n";
    afisare(poz);
    return 0;
}