Cod sursa(job #1861442)

Utilizator jordan1998Jordan jordan1998 Data 28 ianuarie 2017 21:29:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>

using namespace std;
#define tt 100002
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,m=0,i,k,a[tt],b[tt],poz[tt];
inline int caut(int in,int sf,int x)
{
    int m;
    while(in<=sf)
    {
        m=(in+sf)/2;
        if(x<a[b[m]])
            in=m+1;
        else
            sf=m-1;
    }
    return in;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
    f>>a[i];
//rez
for(i=n;i>=1;i--)
{
    k=caut(1,m,a[i]);
    if(k>m)
    {
        poz[i]=b[k-1];
        m=k;
        b[k]=i;
    }
    else
    {
        poz[i]=b[k-1];
        if(a[b[k]]<a[i])
            b[k]=i;
    }
}
g<<m<<'\n';
for(i=b[m];i;i=poz[i])
    g<<a[i]<<" ";
}