Cod sursa(job #1266148)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 18 noiembrie 2014 13:00:41
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
using namespace std;

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

int n, m, i, j, k, ok ,minim ,maxim;
int v[100001], w[100001], nr, t[100001];
int a, b, mid, vec[100001];

int main(){
    fin >> n;
    for(i = 1; i <= n; i ++)
        fin >> v[i];
        //v e vectorul initial
        //w = vectorul de valori
        //t = vectorul de pozitii in care ne inroarcem
    w[1] = 1; nr = 1;
    for(i = 2; i <= n; i ++){
        if(v[i] > v[w[nr]]){
            nr ++;
            w[nr] = i;
            t[nr] = nr - 1;
        }
        else{
            a = 1;
            b = nr;
            while(a <= b){
                mid = (a + b) / 2;
                if(v[w[mid]] >= v[i])
                    b = mid - 1;
                else
                    a = mid + 1;
            }
            w[a] = i;
            t[a] = a - 1;
        }
    }
    fout << nr << "\n";
    i = nr;
    while(i != 0){
        vec[++k] = w[i];
        i = t[i];
    }
    for(i = k; i > 0; i --)
        fout << v[vec[i]] << " ";
    return 0;
}