Cod sursa(job #929639)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 27 martie 2013 10:08:45
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <algorithm>
#define In "scmax.in"
#define Out "scmax.out"
#define N 100001
using namespace std;

int v[N],a[N],poz[N],na,n;
void Citire()
{
    ifstream fin(In);
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    fin.close();
}
ofstream fout(Out);

void Afisare()
{
    int lg=na,i;
    for(i=n;i;i--)
    {
        if(poz[i]==lg)
        {
            a[lg] = v[i];
            lg--;
        }
    }
    fout<<na<<"\n";
    for(i=1;i<=na;i++)
        fout<<a[i]<<" ";
    fout<<"\n";
}

void Rezolvare()
{
    int i,*p,ind;
    a[1] = v[1];
    poz[1] = 1;
    for(i=2;i<=n;i++)
    {
        p = upper_bound(a+1,a+na+1,v[i]);
        ind = p-a;
        if(v[i]==a[ind-1])
            ind--;
        if(ind>na)
            na = ind;
        poz[i] = ind;
        a[ind] = v[i];
    }
}

int main()
{
    Citire();
    Rezolvare();
    Afisare();
    return 0;
}