Cod sursa(job #1648251)

Utilizator maribMarilena Bescuca marib Data 11 martie 2016 09:02:20
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#define DMAX 100002

using namespace std;

typedef long long ll;

ifstream in("scmax.in");
ofstream out("scmax.out");

int n, lung_max, poz;

int before[DMAX], temp[DMAX];

ll v[DMAX];

int loc_poz(ll val){
    int l = 1, r = lung_max, mij;
    while(l <= r){
        mij = (l+r)/2;
        if(val > v[temp[mij]] && val <= v[temp[mij+1]])
            return mij;
        if(v[temp[mij]] >= val)
            r = mij -1;
        if(v[temp[mij + 1]] < val)
            l = mij +1;
    }
    return r;
}

int main()
{
    in>>n;
    for(int i = 1; i <= n; ++i){
        in>>v[i];
    }
    temp[1] = 1;
    lung_max = 1;
    for(int i = 2; i <= n; ++i){
        poz = loc_poz(v[i]);
        temp[poz + 1] = i;
        //before[i] = poz;
        poz++;
        lung_max = (poz > lung_max) ? poz : lung_max;
    }
    out<<lung_max<<"\n";
    for(int i = 1; i <= lung_max; ++i){
        out<<v[temp[i]]<<" ";
    }
    in.close();
    out.close();
    return 0;
}