Cod sursa(job #2189536)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 28 martie 2018 16:14:56
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define DIM 100002

using namespace std;

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

int n, v[DIM], t[DIM];

vector<int> dp;

bool cmp(int a, int b){
    return v[a] < v[b];
}

int main(int argc, const char * argv[]) {
    in>>n;
    for(int i = 1; i <= n; ++ i)
        in>>v[i];
    
    dp.push_back(1);
    
    for(int i = 2; i <= n; ++ i){
        auto poz = upper_bound(dp.begin(), dp.end(), i, cmp);
        if(poz == dp.end()){
            if(*poz < v[i]){
                dp.push_back(i);
            }
            else
                (*poz) = i;
            
        }
        else
            (*poz) = i;
        t[i] = *(poz - 1);
    }
    
    out<<dp.size()<<'\n';
    
    int i = dp.back();
    vector<int> sol;
    
    while(t[i]){
        sol.push_back(v[i]);
        i = t[i];
    }
    
    for(int i = sol.size() - 1; i >= 0; -- i)
        out<<sol[i]<<" ";
    
    
    
    return 0;
}