Cod sursa(job #1397988)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 23 martie 2015 21:40:16
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define NMAX 100004
using namespace std;
int A[NMAX],B[NMAX];
int s[NMAX];
int l,maxx,n,i,j,maxpoz,maxt=0;
int cautarebinara()
{
    int k,step=1;
    for(;step<i;step<<=1);
    for(k=1;step;step>>=1)
        if(k+step<=i && A[k+step]<A[i])
            k+=step;
    if(k==1 && A[k]>=A[i]) return 0;
    return k;
}
int main()
{
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>A[i];
        l=1;maxx=1;
        //for(j=1;j<i;j++)
           // if(A[j]<A[i] && B[j]+1>maxx)
        l=B[cautarebinara()]+1;// B[j]+1;
        B[i]=l;
        if(B[i]>maxt)
        {
            maxt=B[i];
            maxpoz=i;
        }
    }
    g<<maxt<<"\n";
    int val=maxt;
    for(i=maxpoz;i>0;i--)
        if(B[i]==val)
        {
            s[i]=A[i];
            val--;
        }
    for(i=1;i<=maxpoz;i++)
        if(s[i]) g<<s[i]<<" ";
}