Pagini recente » Cod sursa (job #3351746) | Cod sursa (job #3347650) | Cod sursa (job #1050852) | Cod sursa (job #3330717) | Cod sursa (job #3322841)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main() {
int n;
cin >> n;
vector<long long> a(n + 1);
for(int i = 1; i <= n; i ++){
cin >> a[i];
}
vector<long long> tails(n + 1);
vector<int> pos(n + 1);
vector<int> parent(n + 1, 0);
int lmax = 0;
for(int i = 1; i <= n; i++) {
int st = 1, dr = lmax, rasp = 0;
while(st <= dr) {
int mid = (st + dr) / 2;
if(tails[mid] < a[i]) {
rasp = mid;
st = mid + 1;
} else {
dr = mid - 1;
}
}
int len = rasp + 1;
tails[len] = a[i];
pos[len] = i;
parent[i] = (rasp > 0 ? pos[rasp] : 0);
if(len > lmax) {
lmax = len;
}
}
vector<long long> sol;
int p = pos[lmax];
while(p != 0) {
sol.push_back(a[p]);
p = parent[p];
}
reverse(sol.begin(), sol.end());
cout << lmax << "\n";
for(long long x : sol){
cout << x << " ";
}
}