Cod sursa(job #2189541)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 28 martie 2018 16:26:15
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 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], k, dp[DIM];

int main(int argc, const char * argv[]) {
    in>>n;
    for(int i = 1; i <= n; ++ i)
        in>>v[i];
    
    dp[1] = 1;
    
    for(int i = 2; i <= n; ++ i){
        int st = 1, dr = k;
        while(st <= dr){
            int mid = (st + dr) / 2;
            if(v[dp[mid]] < v[i])
                st = mid + 1;
            else
                dr = mid - 1;
        }
        if(st > k)
            ++ k;
        dp[st] = i;
        t[i] = dp[st - 1];
    }
    
    out<<k<<'\n';
    
    vector<int> sol;
    
    k = dp[k];
    
    while(k){
        sol.push_back(v[k]);
        k = t[k];
    }
    
    for(int i = sol.size() - 1; i >= 0; -- i)
        out<<sol[i]<<" ";
    
    
    
    return 0;
}