Pagini recente » Cod sursa (job #490049) | Cod sursa (job #996667) | Cod sursa (job #131127) | Cod sursa (job #1549533) | Cod sursa (job #1780433)
#include <stdio.h>
#include <ctype.h>
#define LIM 1<<7
int v[100001], u[100001], ord[100001], PUTERE;
FILE *fi, *fo;
int a, b, poz=LIM, poz2=0;
char BUF[LIM], BUF2[LIM];
inline char getChar(){
poz++;
if(poz>=LIM){
fread(BUF,LIM,1,fi);
poz=0;
}
return BUF[poz];
}
inline int getNr(){
int r=0, semn=1;
char ch=getChar();
while(isdigit(ch)==0 && ch!='-') ch=getChar();
if(ch=='-'){
semn=-1;
ch=getChar();
}
while(isdigit(ch)!=0){
r=r*10+semn*(ch-'0');
ch=getChar();
}
return r;
}
inline void putch(char ch){
BUF2[poz2++]=ch;
if(poz2==LIM){
fwrite(BUF2,LIM,1,fo);
poz2=0;
}
}
inline void baga(int x){
char s[15];
int k=0;
if(x<0){
putch('0');
return;
}
do{
s[k++]=x%10+'0';
x/=10;
}while(x);
while(k>0){
k--;
putch(s[k]);
}
}
void afis(int i){
if(ord[i]!=0)
afis(ord[i]);
baga(u[i]);
putch(' ');
}
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");
n=getNr();
PUTERE=1;
while(PUTERE<n)
PUTERE*=2;
for(i=1;i<=n;i++)
u[i]=getNr();
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;
}
baga(max);
putch('\n');
afis(v[max]);
if(poz2>0)
fwrite(BUF2,poz2,1,fo);
fclose(fi);
fclose(fo);
return 0;
}