Cod sursa(job #1645063)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 10 martie 2016 10:51:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <iostream>
#define DIM 100005

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int N,v[DIM];
int w[DIM],t[DIM];
int nr;

void drum(int x){

    if(t[x])
        drum(t[x]);
    fout << v[x] << " ";

}

int main(){

    fin >> N;

    for(int i=1;i<=N;i++){
        fin >> v[i];
        if(v[i]>v[w[nr]])
            w[++nr]=i,t[i]=w[nr-1];
        else{
            int p=1;
            int u=nr;
            while(p<=u){
                int mid=(p+u)>>1;
                if(v[i]>v[w[mid]])
                    p=mid+1;
                else
                    u=mid-1;
            }

            p--;

            if(v[i]>v[w[p]]){
                w[p+1]=i;
                t[i]=w[p];
            }
        }
    }

    fout << nr << "\n";

    drum(w[nr]);

}