Pagini recente » Cod sursa (job #2766193) | Cod sursa (job #1230195) | Cod sursa (job #1618424) | Cod sursa (job #1081163) | Cod sursa (job #3210528)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,v[100001],best[100001],k;
int cb(int x){
int st=1,dr=k,poz;
while(st<=dr){
int mij = (st+dr)/2;
if(x<=best[mij])
poz=mij,dr=mij-1;
else
st=mij+1;
}
return poz;
}
int main(){
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
k=1; best[k]=v[1];
for(int i=2;i<=n;i++){
int x = v[i];
if(x>best[k])
best[++k]=x;
else{
int poz = cb(x);
best[poz]=x;
}
}
fout<<k<<'\n';
for(int i=1;i<=k;i++)
fout<<best[i]<<" ";
return 0;
}