Pagini recente » Cod sursa (job #2788531) | Cod sursa (job #778978) | Cod sursa (job #1001835) | Cod sursa (job #1918976) | Cod sursa (job #1781691)
#include <stdio.h>
int v[100001], u[100001], ord[100001], PUTERE;
int out[100001];
FILE *fi, *fo;
inline int CB(int x){
int pas=PUTERE, rez=0;
for(pas/=2;pas>0;pas/=2)
if(v[rez+pas]!=0 && x>u[v[rez+pas]])
rez+=pas;
return rez;
}
int main()
{
int n, i, poz, max=0;
fi=fopen("scmax.in", "r");
fo=fopen("scmax.out", "w");
fscanf(fi, "%d", &n);
PUTERE=1;
while(PUTERE<n)
PUTERE*=2;
for(i=1;i<=n;i++)
fscanf(fi, "%d", &u[i]);
for(i=1;i<=n;i++){
poz=CB(u[i]);
v[poz+1]=i;
ord[i]=v[poz];
if(poz+1>max)
max=poz+1;
}
fprintf(fo, "%d\n", max);
i=v[max];
poz=0;
do{
out[poz++]=u[i];
i=ord[i];
}while(i!=0);
for(poz--;poz>=0;poz--){
fprintf(fo, "%d ", out[poz]);
}
fclose(fi);
fclose(fo);
return 0;
}