Cod sursa(job #1037876)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 20 noiembrie 2013 20:22:27
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;

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

int n,a[100005],poz[100005],v[100005],poz1,vb;

inline void Citire()
{
    fin>>n;
    for (int i=1;i<=n;i++)
        fin>>a[i];
}

inline void Formeaza()
{
    int i,maxim,st,dr,nr,mij;
    maxim=-1;
    v[1]=a[1];vb=1;poz[1]=1;
    for (i=2;i<=n;i++)
        {
            st=1;dr=vb;
            while (st<=dr)
                {
                    mij=(st+dr)/2;
                    if (v[mij]>=a[i] && v[mij-1]<a[i])
                        st=dr+1;
                    else if (v[mij]>=a[i]) dr=mij-1;
                    else {st=mij+1;mij=st;}
                }
            if (v[mij]==0)
                vb++;
            v[mij]=a[i];
            poz[i]=mij;
        }
     for (i=1;i<=n;i++)
        if (poz[i]>maxim)
            {
                maxim=poz[i];
                poz1=i;
            }
    nr=poz[poz1];
    v[0]=nr;
    fout<<nr<<"\n";
    for (i=poz1;i>=1 && nr>=1;i--)
        if (poz[i]==nr)
            {v[nr]=a[i];
             nr--;}
    for (i=1;i<=v[0];i++)
        fout<<v[i]<<" ";
    fout<<"\n";
}

int main()
{
    Citire();
    Formeaza();
    return 0;
}