Pagini recente » Cod sursa (job #1659110) | Cod sursa (job #2065100) | Cod sursa (job #985686) | Cod sursa (job #790771) | Cod sursa (job #1686080)
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> q,v,l,ans;
int main(void){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,t;
vector<int>::iterator it;
scanf("%d",&n);
for(int i=0; i<n; ++i){
scanf("%d",&t);
it=lower_bound(q.begin(), q.end(), t);
if(it==q.end()){
q.push_back(t);
l.push_back(q.size());
}
else{
*it=t;
l.push_back(it-q.begin()+1);
}
v.push_back(t);
}
printf("%d\n",q.size());
for(int t=q.size(), i=l.size()-1; t; --i){
if(l[i]==t){
ans.push_back(v[i]);
--t;
}
}
for(int i=ans.size()-1; i>=0; --i)
printf("%d ",ans[i]);
return 0;
}