Cod sursa(job #1266155)

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

ifstream fin("date.in");
ofstream fout("date.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[i] = w[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;
            }
            if (v[i] > v[w[a-1]]) {
                w[a] = i;
                t[i] = w[a - 1];
            }
        }
    }
    fout << nr << "\n";
    i = w[nr];
    while(i != 0){
        vec[++k] = i;
        i = t[i];
    }
    for(i = k; i > 0; i --)
        fout << v[vec[i]] << " ";
    return 0;
}