Cod sursa(job #1974987)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 29 aprilie 2017 17:21:11
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
using namespace std;
ifstream in ("scmax.in" );
ofstream out("scmax.out");
int n,i,k,w[100001],v[100001],len[100001],st,dr,mid,d,r[100001],maxim;
int main(){
    in >> n;
    for( i = 1; i <= n; i ++ ){
        in >> v[i];
    }
    for( i = 1; i <= n; i ++ ){
        if( v[i] > w[k]){
            k ++;
            w[k] = v[i];
            len[i] = k;
        }
        else{
            for( st = 1, dr = k; st <= dr; ){
                mid = ( st + dr ) / 2;
                if( w[mid] <= v[i] ){
                    st = mid + 1;
                }
                else{
                    dr = mid - 1;
                }
            }
            w[st] = v[i];
            len[i] = st ;
        }
    }


    for( i = 1; i <= n; i ++ ){
        if( maxim < len[i] ){
            maxim = len[i];
        }
    }
    out<<maxim<<"\n";
    for( i = n; i >= 1; i -- ){
        if( len[i] == maxim ){
            maxim --;
            d++;
            r[d] = v[i];
        }
    }
    for( i = d; i >= 1; i -- ){
        out << r[i]<<" ";
    }
    return 0;
}