Pagini recente » Cod sursa (job #157510) | Cod sursa (job #582051) | Cod sursa (job #2630731) | Cod sursa (job #3342868) | Cod sursa (job #3349621)
#include<bits/stdc++.h>
using namespace std;
int n, a[100001];
int lis[100001], best_len[100001], k=0;
void add_to_lis(int current_index, int element){
if(k==0) {
lis[++k] = element;
return;
}
int st=1, dr=k, poz=k+1;
while(st<=dr){
int middle = st+dr>>1;
if(element <= lis[middle]){
dr = middle - 1;
poz = middle;
}
else {
st = middle + 1;
}
}
lis[poz] = element;
if(poz == k+1) ++k;
best_len[current_index] = k;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
add_to_lis(i, a[i]);
}
cout << k << '\n';
for(int i=1; i<=k ;++i){
cout << lis[i] << ' ';
}
return 0;
}