Pagini recente » Cod sursa (job #2187375) | Cod sursa (job #919758) | Cod sursa (job #711474) | Cod sursa (job #79809) | Cod sursa (job #1623047)
#include<stdio.h>
#define DIM 100005
FILE *f=fopen("scmax.in","r"), *g=fopen("scmax.out","w");
int N, v[DIM], P[DIM], Q[DIM], hQ, r[DIM];
void Citire(){
int i;
fscanf(f,"%d\n",&N);
for(i=1;i<=N;i++)
fscanf(f,"%d",&v[i]);
}
void Pune( int NR, int POZ, int I ){
Q[POZ] = NR;
P[I] = POZ;
}
void PD(){
int i, nr, st, dr, mij, next;
hQ = 1;
Q[1] = v[1];
P[1] = 1;
for(i=2;i<=N;i++){
nr = v[i];
if( nr > Q[hQ] )
Pune(nr,++hQ,i);
else{
st = 1;
dr = hQ;
while( st <= dr ){
mij = (st+dr)/2;
if( Q[mij-1] < nr && nr <= Q[mij] )
{ Pune(nr,mij,i); break; }
else if( nr <= Q[mij-1] )
dr = mij-1;
else
st = mij+1;
}
}
}
fprintf(g,"%d\n",hQ);
next = hQ;
for(i=N;i>=1,next!=0;i--){
if( P[i] == next ){
r[next] = v[i];
next--;
}
}
for(i=1;i<=hQ;i++)
fprintf(g,"%d ",r[i]);
}
int main(){
Citire();
PD();
return 0;
}