Cod sursa(job #1611522)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 24 februarie 2016 10:44:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <fstream>
using namespace std;

int main(){
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    int n;
    f >> n;

    vector<int> v(n);
    for(int i = 0; i < n; ++i){
        f >> v[i];
    }
    vector<int> len(n), best(n+1, 0);
    int poz_last = -1, max_len = 0;
    for(int i = 0; i < n; ++i){
        vector<int>::iterator cur = lower_bound(best.begin(), best.begin()+max_len+1, v[i]);
        len[i] = distance(best.begin(), cur);
        *cur = v[i];
        if(len[i] > max_len){
            max_len = len[i];
            poz_last = i;
        }
    }

    vector<int> rez(max_len);

    rez.back() = v[poz_last];
    for(int i = poz_last-1, len_caut = max_len-1; len_caut > 0; --i){
        if(len[i] == len_caut){
            --len_caut;
            rez[len_caut] = v[i];
        }
    }

    g << rez.size() << '\n';
    for(int i = 0; i < max_len; ++i){
        g << rez[i] << " ";
    }
}