Cod sursa(job #1527567)

Utilizator robx12lnLinca Robert robx12ln Data 18 noiembrie 2015 12:53:24
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int t[100005],w[100005],v[100005],p,u,nr,mid,n;
void drum(int x){
    if( x != 0){
        drum(t[x]);
        fout<<v[x]<<" ";
    }
}
int main(){
    fin >> n;
    for( int i = 1; i <= n; i++ ){
        fin >> v[i];
    }
    w[1] = 1;
    t[1] = 0;
    nr = 1;
    for( int  i = 2; i <= n; i++ ){
        if( v[i] > v[ w[nr] ] ){
            nr++;
            w[nr] = i;
            t[i]  = w[nr-1];
        }else{
            p = 1;
            u = nr;
            while( p <= u ){
                int mid = ( p + u ) / 2;
                if( v[i] > v[ w[mid] ] ){
                    p = mid + 1;
                }else{
                    u = mid - 1;
                }
            }
            if( v[i] > v[ w[u] ] ){
                w[p] = i;
                t[i] = w[u];
            }
        }
    }
    fout << nr <<"\n";
    drum(w[nr]);
    return 0;
}