Pagini recente » Cod sursa (job #691941) | Cod sursa (job #2695936) | Cod sursa (job #169817) | Cod sursa (job #2194420) | Cod sursa (job #931718)
Cod sursa(job #931718)
#include<cstdio>
using namespace std;
FILE *in,*out;
const int N = 100100, MAX = 2000000001;
int n, v[N], val[N];
void citire(){
fscanf(in,"%d",&n);
for(register int i=1; i<=n; i++){
fscanf(in,"%d",&v[i]);
val[i]=MAX;
}
}
int caut_bin (int a, int max){
int loc=0,pas=1<<16;
while(pas!=0){
if(loc+pas<=max && v[val[loc+pas]] < a)
loc+=pas;
pas>>=1;
}
return loc + 1;
}
void afisare(int max){
fprintf(out,"%d\n",max);
for(register int i=1; i<=max; i++)
fprintf(out,"%d ",v[val[i]]);
}
int main(){
in=fopen("scmax.in","r");
out=fopen("scmax.out","w");
citire();
val[1]=1;
int nr,max=1;
for(register int i=2;i<=n;i++){
nr=caut_bin(v[i],max);
val[nr]=i;
if(nr>max)
max=nr;
}
afisare(max);
fclose(in);
fclose(out);
return 0;
}