Pagini recente » Cod sursa (job #1501379) | Cod sursa (job #2630913) | Cod sursa (job #1876492) | Cod sursa (job #1603238) | Cod sursa (job #1029209)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> p,q,sol;
vector <int> ::iterator it;
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n;
int v[100005];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
q.push_back(v[0]);
p.push_back(0);
for(int i=1;i<n;i++){
int poz;
it=lower_bound(q.begin(),q.end(),v[i]);
poz=(int)(it-q.begin());
if(it==q.end()){
q.push_back(v[i]);
}else{
*it=v[i];
}
p.push_back(poz);
}
int lmax,m;
lmax=q.size();
printf("%d\n",lmax);
m=p.size();
m--;
lmax--;
for(int i=m;i>=0;i--){
if(lmax==p[i]){
sol.push_back(v[i]);
lmax--;
}
}
reverse(sol.begin(),sol.end());
m=sol.size();
for(int i=0;i<m;i++){
printf("%d ",sol[i]);
}
return 0;
}