Cod sursa(job #2355805)

Utilizator mihai.alphamihai craciun mihai.alpha Data 26 februarie 2019 12:36:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5 + 5;

int n;
int v[maxn], maxx;
int cap[maxn];

inline int caut(int nr)  {
    int pas = 1 << 18, r = 0;
    while(pas)  {
        if(r + pas <= maxx && v[cap[r + pas]] < v[nr])
            r += pas;
        pas >>= 1;
    }
    return r;
}

int prev1[maxn];
vector <int> aa;

int main()  {
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    cin >> n;
    int st = 1;
    maxx = 0;
    prev1[1] = 0;
    for(int i = 1;i <= n;i++)  {
        cin >> v[i];
        int nr = caut(i);
        cap[nr + 1] = i;
        prev1[i] = cap[nr];
        if(nr + 1 > maxx)  {
            maxx = nr + 1;
            st = i;
        }
    }
    cout << maxx << "\n";
    while(st != 0)  {
        aa.push_back(st);
        st = prev1[st];
    }
    for(int i = aa.size() - 1;i >= 0;i--)
        cout << v[aa[i]] << ' ';
    return 0;
}