Pagini recente » Cod sursa (job #577648) | Cod sursa (job #908990) | Cod sursa (job #647847) | Cod sursa (job #1611649) | Cod sursa (job #1609243)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[100003];
int s[100003];
int o[100003];
int k;
int main() {
int n;
in >> n;
for(int i = 0; i < n; i++) {
in >> v[i];
s[i] = -2000000003;
}
for(int i = 0; i < n; i++) {
/*for(int j = 0; j < k; j++)
cout << s[j] << " ";
cout << '\n';*/
if(v[i] > s[k-1]) {
s[k++] = v[i];
o[i] = k-1;
continue;
}
if(v[i] < s[0]) {
s[0] = v[i];
o[i] = 0;
continue;
}
int poz = upper_bound(s, s+k, v[i])-s;
if(s[poz-1] != v[i]) {
s[poz] = v[i];
o[i] = poz;
}
}
int ct = k-1;
out << k << '\n';
stack<int> st;
for(int i = n-1; i >= 0; i--) {
if(ct == o[i]) {
//cout << v[i] << " ";
st.push(v[i]);
ct--;
if(ct == -1)
break;
}
}
while(!st.empty()) {
out << st.top() << " ";
st.pop();
}
/*cout << '\n';
for(int i = 0; i < k; i++)
cout << s[i] << " ";*/
return 0;
}