Pagini recente » Cod sursa (job #3263983) | Cod sursa (job #1692591) | Cod sursa (job #1847673) | Cod sursa (job #1509102) | Cod sursa (job #1377739)
#include<stdio.h>
#define MAXN 100005
FILE *f=fopen("scmax.in","r"), *g=fopen("scmax.out","w");
long int N, v[MAXN], Q[MAXN], hQ;
void Citire(){
long int i;
fscanf(f,"%ld\n",&N);
for(i=1;i<=N;i++) fscanf(f,"%ld",&v[i]);
}
void Rezolvare(){
long int i, k1, k2, mij, nr;
Q[1]=v[1]; hQ=1;
for(i=2;i<=N;i++){
nr = v[i];
if( nr > Q[hQ] ){ Q[++hQ]=nr; }
else{
k1=1; k2=hQ;
while( k1<=k2 ){
mij = (k1+k2)/2;
if( Q[mij-1] < nr && nr <= Q[mij] ) { Q[mij] = nr; break; }
if( Q[mij] < nr ) k1 = mij+1;
else k2 = mij-1;
}
}
}
fprintf(g,"%ld\n",hQ);
for(i=1;i<=hQ;i++) fprintf(g,"%ld ",Q[i]);
}
int main(){
Citire();
Rezolvare();
return 0;
}