Pagini recente » Cod sursa (job #2643761) | Cod sursa (job #1454470) | Cod sursa (job #2716022) | Cod sursa (job #536094) | Cod sursa (job #931734)
Cod sursa(job #931734)
#include<cstdio>
using namespace std;
FILE *in,*out;
const int N = 100100, MAX = 2000000001;
int n, v[N], val[N], pred[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 x){
if(x)
afisare(pred[x]);
if(x)
fprintf(out,"%d ",v[x]);
}
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;
pred[i]=val[nr-1];
if(nr>max)
max=nr;
}
fprintf(out,"%d\n",max);
afisare(val[max]);
fclose(in);
fclose(out);
return 0;
}