Cod sursa(job #2758808)

Utilizator lahayonTester lahayon Data 13 iunie 2021 01:14:07
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>


using namespace std;

void write(ofstream& cout, int len, int index, const vector<int>& prev, const vector<int>& idx, const vector<int>& A){
    if(prev[index] != -1)
        write(cout, len - 1, prev[index], prev, idx, A);
    cout << A[index] << " ";
}


int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
         

    int N;
    vector<int> A, prev, idx;
    cin >> N;
    for(int i = 0, x; i < N; ++i){
        cin >> x;
        A.push_back(x);
        prev.push_back(-1);
        idx.push_back(-1);
    }
    idx.push_back(-1);
    int max_len = 0;
    for(int i = 0; i < N; ++i){

        int low = 1, high = max_len, mid;
        while(low <= high){
            mid = (low + high) / 2;
            if(A[idx[mid]] < A[i])
                low = mid + 1;
            else high = mid - 1;
        }

        prev[i] = idx[low - 1];
        idx[low] = i;
        max_len = max(max_len, low);
    }

    cout << max_len << "\n";

    write(cout, max_len, idx[max_len], prev, idx, A);
    
    
  
    cin.close();
    cout.close();

    return 0;
}