Cod sursa(job #1456843)

Utilizator danysilas23Silas Daniel danysilas23 Data 2 iulie 2015 09:03:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
using namespace std;
long long t[100003], n, x[100003], p, u, mij, i, nr, sol[100003];
ifstream in("scmax.in");
ofstream out("scmax.out");
void drum(int xx){
    if(xx!=0){
        drum(t[xx]);
        out<<x[xx]<<" ";
    }
}
int main(){
    in>>n;
    for(i=1; i<=n; i++)
        in>>x[i];
    for(i=1; i<=n; i++){
        p=1; u=nr;
        while(p<=u){
            mij=p+(u-p)/2;
            if(x[i]<=x[sol[mij]])
                u=mij-1;
            else
                p=mij+1;
        }
        if(x[i]<x[sol[p]]){
            sol[p]=i;
            t[i]=sol[p-1];
        }
        if(p>nr){
            sol[++nr]=i;
            t[i]=sol[p-1];
        }
    }
    out<<nr<<"\n";
    drum(sol[nr]);
return 0;
}