Pagini recente » Cod sursa (job #334136) | Cod sursa (job #1640636) | Cod sursa (job #2880693) | Cod sursa (job #683325) | Cod sursa (job #3286587)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int main(){
ios::sync_with_stdio(0);
fin.tie(nullptr);
fin>>n;
vector <int> v(n);
for(int i=0;i<n;i++)
fin>>v[i];
vector <int> parent(n,-1), index(n,-1);
vector <int> d(n+1,INT_MAX);
d[0]=INT_MIN;
for(int i=0;i<n;i++){
int l=upper_bound(d.begin(), d.end(), v[i]) - d.begin();
if(d[l-1]<v[i]&&d[l]>v[i]){
d[l]=v[i];
index[l]=i;
if(l>0)
parent[i]=index[l-1];
}
}
int dmax, p;
for(int i=n;i>0;i--){
if(d[i]!=INT_MAX){
dmax=i;
p=index[i];
break;
}
}
fout<<dmax<<endl;
vector <int> rez;
while(p!=-1){
//cout<<p<<' '<<v[p]<<' '<<parent[p]<<endl;
rez.push_back(v[p]);
p=parent[p];
}
for(int i=rez.size()-1;i>=0;i--)
fout<<rez[i]<<' ';
return 0;
}