Cod sursa(job #1330628)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 30 ianuarie 2015 20:24:03
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#define DIM 100005
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,v[DIM],w[DIM],nr,t[DIM];
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,u=nr,mid;
            while(p<=u){
                mid=(p+u)>>1;
                if(v[i]>v[w[mid]])
                    u=mid-1;
                else
                    p=mid+1;
            }
            if(v[i]<v[w[p-1]]){
                w[p]=i;
                t[i]=w[p-2];
            }
        }
    }
    fout<<nr<<"\n";
    drum(w[nr]);
    fin.close();fout.close();
    return 0;
}