Pagini recente » Cod sursa (job #2407955) | Cod sursa (job #2477588) | Cod sursa (job #2181452) | Cod sursa (job #1266049) | Cod sursa (job #464829)
Cod sursa(job #464829)
#include <stdio.h>
#define nmax 100003
#define inf 2000000001
using namespace std;
int v[nmax],q[nmax],p[nmax],lg=0,n;
void citire(void)
{FILE *fin=fopen("scmax.in","r");
int i;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++) fscanf(fin,"%d",&v[i]);
fclose(fin);
}
int ins(int x,int st, int dr)
{int m=(st+dr)/2;
if(st==dr)
{if(dr>lg) ++lg;
q[st]=x; return st;
}
else if(x<=q[m]) return ins(x,st,m);
else return ins(x,m+1,dr);
}
void solve(void)
{int i,k=n;
for(i=1;i<=n;i++)
p[i]=ins(v[i],1,lg+1);
for(i=lg;i;i--)
{while(p[k]!=i) k--;
q[i]=v[k];
}
}
void scrie(void)
{FILE *fout=fopen("scmax.out","w");
int i;
fprintf(fout,"%d\n",lg);
for(i=1;i<=lg;i++) fprintf(fout,"%d ",q[i]);
fclose(fout);
}
int main(void)
{citire();
solve();
scrie();
return 0;
}