Cod sursa(job #1941567)

Utilizator AkrielAkriel Akriel Data 27 martie 2017 14:12:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 100005;

int n, v[N], B[N];

vector <pair <int, int> > C;

void printSolution(int D){
    if (D == 0)
        return;
    printSolution(B[D]);
    g << v[D] << " ";
}

int main()
{
    f >> n;
    for ( int i = 1; i <= n; i++ )
        f >> v[i];

    vector <pair< int, int> > :: iterator it;
    C.push_back(make_pair(0,0));
    for ( int i = 1; i <= n; i++ ){
        it = lower_bound(C.begin(), C.end(), make_pair(v[i],0));
        if ( it == C.end() )
        {
            B[i] = C.back().second;
            C.push_back(make_pair(v[i],i));
        }
        else{
            *it = make_pair(v[i],i);
            it--;
            B[i] = it->second;
        }
    }
    g << C.size()-1 << "\n";
    printSolution(C.back().second);
}