Cod sursa(job #1325880)

Utilizator vlad00Vlad Stoleru vlad00 Data 24 ianuarie 2015 14:20:59
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,w[100005],v[100005],dp[100005], sol[100005],i, na;
int cb(int nr)
{
    int st,dr,rez;
    st=1;
    dr=na;
    rez=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(nr<=dp[mij])
        {
            dr=mij-1;
            rez=mij;
        }
        else if(nr>dp[mij])
            st=mij+1;
    }
    if(rez==-1)
        rez=na+1;

    return rez;
}
int main()
{
    int dr;
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];
    dp[1]=v[1];
    na=1;
    for(i=2; i<=n; i++)

    {
        int poz=  cb(v[i]);
        if(poz>na)
        {
            ++na;
        }
        dp[poz]=v[i];
        w[i]=poz;

    }
    g<<na<<'\n';
    w[1]=1;
    int lgmax = na;
    for(i=n; i>=1; i--)
    {
        if(w[i]==na)
        {
            sol[na] = v[i];
            --na;
        }
    }
    for (i = 1; i <= lgmax; ++ i)
        g << sol[i] << " ";

    f.close();
    g.close();
    return 0;
}