Pagini recente » Cod sursa (job #664092) | Cod sursa (job #2647189) | Cod sursa (job #2473690) | Cod sursa (job #1080624) | Cod sursa (job #1246269)
//#include <iostream>
#include <stdio.h>
#define nmax 100001
using namespace std;
FILE *f=fopen("scmax.in","r"),*g=fopen("scmax.out","w");
long v[nmax],p[nmax],q[nmax],s[nmax],len,n;
void consts()
{
long k=n,i;
for(i=len;i;i--)
{
while(p[k]!=i)
k--;
s[i]=v[k];
}
}
long ins(long lo, long hi, long k)
{
long m=(lo+hi)/2;
if(hi==lo)
{
if(hi>len&&q[hi-1]!=k)
q[++len+1]=2000000001;
if(q[hi-1]!=k)
q[lo]=k;
return lo;
}
else if(k<q[m])
return ins(lo,m,k);
else if(k>q[m])return ins(m+1,hi,k);
else return m;
}
void constpq()
{
long i;
q[1]=2000000001;
for(i=1;i<=n;i++)
p[i]=ins(1,len+1,v[i]);
}
int main()
{
fscanf(f,"%d",&n);
long i;
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
constpq();
consts();
fprintf(g,"%ld\n",len);
for(i=1;i<=len;i++)
fprintf(g,"%ld ",s[i]);
return 0;
}