Cod sursa(job #185903)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 26 aprilie 2008 13:02:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#define FIN "scmax.in"
#define FOUT "scmax.out"
#define MAX_N 100010
using namespace std;
int target,v[MAX_N],n,lmax[MAX_N],a[MAX_N],solution[MAX_N];


void cbin(int p,int u,int vl){
        if (p<=u){
                int m=(p+u)/2;
                if (v[m]>=vl){
                    target=m;
                    cbin(p,m-1,vl);
                } else cbin(m+1,u,vl);
        }
        return ;
}



int main(void){

        freopen(FIN,"rt",stdin);
        freopen(FOUT,"wt",stdout);

        cin>>n;

        int len=0,x;

        for (int i=1;i<=n;++i){
                cin>>x;
                target=len+1;
                cbin(1,len,x);
                v[target]=x;
                if (target>len)++len;
                lmax[i]=target;
                a[i]=x;
        }

        cout<<len<<"\n";
        
        int lastvalue=2000000001;
        int cpos=n;
        for (int i=len;i>=1;--i){
            while (lmax[cpos]!=i || a[cpos]>=lastvalue){--cpos;}
            solution[i]=a[cpos];
        }

        for (int i=1;i<len;++i)printf("%d ",solution[i]);
        cout<<solution[len]<<"\n";

        fclose(stdin);
        fclose(stdout);

        return 0;
}