Pagini recente » Cod sursa (job #1491099) | Monitorul de evaluare | Cod sursa (job #321994) | Cod sursa (job #2398971) | Cod sursa (job #3317632)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> v,dp,vm;
void refac(int p,int l,int vm){
if(!l) return;
if(dp[p]==l&&v[p]<vm){
refac(p-1,l-1,v[p]);
fout<<v[p]<<" ";
}else{
refac(p-1,l,vm);
}
}
int caut_bin(vector<int>&v,int n,int x){
int st=1,dr=n,rez=st-1;
while(st<=dr){
int m=(st+dr)/2;
if(v[m]<x){
rez=m;
st=m+1;
}else{
dr=m-1;
}
}
return rez;
}
int main(){
int n;
fin>>n;
v.resize(n);
dp.resize(n);
vm.resize(n+1);
int imax=0,nvm=0;
for(int i=0;i<n;i++){
fin>>v[i];
int j=caut_bin(vm,nvm,v[i]);
if(j+1>nvm) nvm++;
dp[i]=j+1;
vm[j+1]=v[i];
if(dp[i]>dp[imax]) imax=i;
}
fout<<dp[imax]<<'\n';
refac(imax,dp[imax],INT_MAX);
return 0;
}