Pagini recente » Cod sursa (job #903171) | Cod sursa (job #3038974) | Cod sursa (job #664382) | Cod sursa (job #3319437) | Cod sursa (job #3318814)
#include <fstream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
const int maxn=1e5+5;
int n;
int v[maxn];
map<int,int> last;
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i];
}
vector<int> lis;
lis.push_back(0);
for(int i=1;i<=n;i++){
auto it=lower_bound(lis.begin(),lis.end(),v[i]);
if(it==lis.end()){
lis.push_back(v[i]);
}else *it=v[i];
it=prev(it);
last[v[i]]=*it;
}
cout<<lis.size()-1<<'\n';
int act=lis[lis.size()-1];
vector<int> rsp;
while(act!=0){
rsp.push_back(act);
act=last[act];
}
reverse(rsp.begin(),rsp.end());
for(auto elem:rsp)cout<<elem<<" ";
return 0;
}