Pagini recente » Cod sursa (job #1753765) | Cod sursa (job #46828) | Cod sursa (job #522744) | Cod sursa (job #2442108) | Cod sursa (job #2949735)
#include <bits/stdc++.h>
const int NMAX=1e5;
using namespace std;
int v[NMAX+1],rez[NMAX+1],poz[NMAX+1],retur[NMAX+1];
int main(){
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i,n,k=1,st,dr,mijl,max1=0,cmax1=0;
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
}
for(i=1;i<=n;i++){
st=1;
dr=k;
while(st<=dr){
mijl=(st+dr)/2;
if(rez[mijl]<v[i]){
st=mijl+1;
}
else{
dr=mijl-1;
}
}
rez[st]=v[i];
poz[i]=st-1;
k=max(k,st);
//cout<<poz[i]<<" ";
max1=max(max1,poz[i]);
}
fout<<max1<<"\n";
for(i=n;i>=1;i--){
if(poz[i]==max1){
cmax1=max1;
while(cmax1>0){
while(poz[i]!=cmax1){
i--;
}
retur[cmax1]=v[i];
cmax1--;
}
}
}
for(i=1;i<=max1;i++){
fout<<retur[i]<<" ";
}
return 0;
}