Cod sursa(job #1691726)

Utilizator robx12lnLinca Robert robx12ln Data 19 aprilie 2016 11:59:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[DIM], w[DIM], n, nr, dr, st, mid, t[DIM];
void drum( int nod ){
    if( nod != 0 ){
        drum( t[nod] );
        fout << v[nod] << " ";
    }
    return ;
}
int main(){
    fin >> n;
    for( int i = 1; i <= n; i++ ){
        fin >> v[i];
    }
    nr = 1;
    w[1] = 1;
    t[1] = 0;
    for( int i = 2; i <= n; i++ ){
        if( v[ w[nr] ] < v[i] ){
            nr++;
            w[nr] = i;
            t[i] = w[nr - 1];
        }else{
            st = 1;
            dr = nr;
            while( st <= dr ){
                mid = ( st + dr ) / 2;
                if( v[ w[mid] ] < v[i] ){
                    st = mid + 1;
                }else{
                    dr = mid - 1;
                }
            }
            if( v[ w[dr] ] < v[i] ){
                t[i] = w[dr];
                w[dr + 1] = i;
            }
        }
    }
    fout << nr << "\n";
    drum( w[nr] );
    return 0;
}