Pagini recente » Cod sursa (job #309922) | Cod sursa (job #1009399) | Cod sursa (job #2726500) | Cod sursa (job #2394383) | Cod sursa (job #2072727)
#include <stdio.h>
#include <fstream>
#define nmax 100002
using namespace std;
FILE *fin;
FILE *fout;
int in_loc,out_loc;char in_buff[4096],out_buff[50000];
int n,v[nmax],lg[nmax],pred[nmax],poz2,ma,ma2;
inline void read_init(const char *nume)
{
fin=fopen(nume,"r");
in_loc=0;
}
inline void write_init(const char *nume)
{
fout=fopen(nume,"w");
out_loc=0;
}
inline void write_ch(char ch)
{
if(out_loc==50000)
{
fwrite(out_buff,1,50000,fout);
out_loc=0;
out_buff[out_loc++]=ch;
}
else
out_buff[out_loc++]=ch;
}
inline void write_int(int nr)
{
if(nr<=9)
write_ch(nr+'0');
else
{
write_int(nr/10);
write_ch(nr%10+'0');
}
}
inline char read_ch()
{
in_loc++;
if(in_loc==4096)
{
in_loc=0;
fread(in_buff,1,4096,fin);
}
return in_buff[in_loc];
}
inline int read_int()
{
int nr=0;
char c;
while(!isdigit(c=read_ch()));
if(isdigit(c))
nr=c-'0';
while(isdigit(c=read_ch()))
nr=nr*10+c-'0';
return nr;
}
inline void write_appendix()
{
fwrite(out_buff,1,out_loc,fout);
}
inline int determinare_lung_max(int x,int k)
{
ma=1;
int poz=0;
for(int i=1;i<k;i++)
{
if(ma<lg[i]+1&&v[i]<v[k])
{
ma=lg[i]+1;
poz=i;
}
}
return poz;
}
inline void afisare(int k)
{
if(pred[k])
{
afisare(pred[k]);
}
write_int(v[k]);
write_ch(' ');
}
int main()
{
read_init("scmax.in");
write_init("scmax.out");
n=read_int();
v[1]=read_int();
lg[1]=1;
pred[1]=0;
for(int i=2;i<=n;i++)
{
v[i]=read_int();
lg[i]=1;
pred[i]=0;
pred[i]=determinare_lung_max(v[i],i);
lg[i]=ma;
if(ma>ma2)
{
ma2=ma;
poz2=i;
}
}
write_int(ma2);
write_ch('\n');
afisare(pred[poz2]);
write_int(v[poz2]);
write_appendix();
return 0;
}