Pagini recente » Cod sursa (job #2073402) | Cod sursa (job #2499732) | Cod sursa (job #2683436) | Cod sursa (job #2496698) | Cod sursa (job #1094555)
#include<stdio.h>
#define DIM 100004
FILE *f=fopen("scmax.in","r"), *g=fopen("scmax.out","w");
long int n, v[DIM], Q[DIM], P[DIM], lQ=0, sol[DIM];
void citire(){
long int i;
fscanf(f,"%ld\n",&n);
for(i=1;i<=n;i++){
fscanf(f,"%ld ",&v[i]);
}
}
long int inserare(long int nr){
long int st, fn, mij;
st=1; fn=lQ; mij= (st+fn)/2;
while(st<=fn){
if( Q[mij-1] < nr && nr <= Q[mij] ) { return mij; }
else if( nr< Q[mij] ) { fn=mij-1; mij=(st+fn)/2; }
else { st=mij+1; mij=(st+fn)/2; }
}
lQ++; return lQ; // numarul e mai mare decat toate || Q e vid
}
void rezolvare(){
long int i,j, cauta;
for(i=1;i<=n;i++){
P[i]=inserare(v[i]);
Q[ P[i] ]=v[i];
}
fprintf(g,"%ld\n",lQ);
cauta=lQ;
for(i=n;i>=1;i--){
if(P[i]==cauta){sol[cauta]=v[i];cauta--;}
}
for(i=1;i<=lQ;i++)fprintf(g,"%ld ",sol[i]);
}
int main(){
citire();
rezolvare();
return 0;
}