Pagini recente » Cod sursa (job #3144920) | Cod sursa (job #381491) | Profil Nitu.Catalin1998 | Cod sursa (job #2266852) | Cod sursa (job #1784944)
#include <iostream>
using namespace std;
int N,i;
int a[100015], s[100015];
int P[100015],M[100015],L;
void afis(int o) {
if(P[o] > 0)
afis(P[o]);
cout << a[o] << " ";
}
int bs(int nr) {
int lo = 1,hi = L;
while (lo <= hi){
int mid = (lo + hi) / 2;
if(a[M[mid]] < nr)
lo = mid + 1;
else
hi = mid - 1;
}
return lo;
}
void LIS() {
for(i = 0; i < N; i++) {
int newL = bs(a[i]);
P[i] = M[newL - 1];
M[newL] = i;
if (newL > L)
L = newL;
}
cout << L << '\n';
afis(M[L]);
}
int main() {
// freopen("f.txt","r",stdin);//
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
cin >> N;
for(i = 0; i < N; i++)
cin >> a[i];
LIS();
return 0;
}