Pagini recente » Cod sursa (job #380930) | Cod sursa (job #3219335) | Cod sursa (job #469929) | Cod sursa (job #2316738) | Cod sursa (job #2292934)
#include <fstream>
#define MAX 100004
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,V[MAX],Best[MAX],Poz[MAX],Ans[MAX],maxi=1,poz;
int s,d,mij;
int main(){
int i,j;
fin>>n;
for(i=0;i<n;++i) fin>>V[i];//citim
Best[1]=0;//! In best tin minte pozitia celui mai bun nr de pana acum, in loc nr
for(i=1;i<n;++i){
if(V[i]>V[Best[maxi]]){
Poz[i]=Best[maxi];
Best[++maxi]=i;
}else{
s=0;d=maxi+1;
while(d-s>1){
mij=(s+d)/2;
if(V[Best[mij]]>V[i])d=mij;
else s=mij;
}
if(d!=maxi+1&&V[Best[d-1]]!=V[i]){
Poz[i]=Best[d-1];
Best[d]=i;
}
}
}
fout<<maxi<<'\n';
poz=Best[maxi];
for(i=0;i<maxi;++i){
Ans[i]=V[poz];
poz=Poz[poz];
}
for(i=maxi-1;i>=0;--i)fout<<Ans[i]<<' ';
return 0;
}