Cod sursa(job #1488069)

Utilizator TibixbAndrei Tiberiu Tibixb Data 17 septembrie 2015 20:59:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int t[100003], n, i, x[100003], p, u, k, mij, d[100003];
void afisare (int k)
{
    if(t[k]>0)
        afisare (t[k]);
    out<<x[k]<<" ";
}
int main()
{
    in>>n;
    for(i=1; i<=n; i++)
        in>>x[i];
    for(i=1; i<=n; i++)
    {
        p=1; u=k;
        while(p<=u)
        {
            mij=p+(u-p)/2;
            if(x[i]>x[d[mij]])
                p=mij+1;
            else
                u=mij-1;
        }
        if(p>k)
        {
            d[++k]=i;
            t[i]=d[k-1];
        }
        else
        {
            if(x[i]<x[d[p]])
            {
                d[p]=i;
                t[i]=d[p-1];
            }
        }

    }
    out<<k<<"\n";
    afisare (d[k]);
    return 0;
}