Pagini recente » Cod sursa (job #680562) | Cod sursa (job #1915615) | Cod sursa (job #1950619) | Cod sursa (job #647446) | Cod sursa (job #1784838)
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int N,k,i;
int a[100005], s[100005];
map<int,int> parent,nxt;
void afis(int o) {
if(parent[o] > 0)
afis(parent[o]);
cout << o << " ";
}
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];
s[k++] = a[0];
for(int j = 1; j < N; j++) {
int idx = std::lower_bound(s,s + k,a[j]) - s;
if(idx != k) {
parent[a[j]] = parent[s[idx]];
nxt[parent[s[idx]]] = a[j];
parent[nxt[s[idx]]] = a[j];
s[idx] = a[j];
}
else {
parent[a[j]] = s[k - 1];
nxt[s[k - 1]] = a[j];
s[k++] = a[j];
}
}
cout << k << '\n';
afis(s[k - 1]);
return 0;
}