Pagini recente » Cod sursa (job #55178) | Cod sursa (job #286986) | Cod sursa (job #2867333) | Cod sursa (job #1834765) | Cod sursa (job #815535)
Cod sursa(job #815535)
#include<cstdio>
using namespace std;
const int LIM = 10005, INF=99999999;
int v[LIM], p[LIM], q[LIM], lq=0;
void print(FILE *out, int start, int x){
int i=start;
for(i=start; p[i]!=x; --i);
if(x-1>=1)
print(out, i-1, x-1);
fprintf(out, "%d ", v[i]);
}
int store(int x, int lo, int hi){
int mid=(lo+hi)/2;
if(q[mid]==x)
return -1;
if(lo==hi){
if(hi>lq) q[++lq+1]=INF;
q[lo]=x;
return lo;
}
else if(x<q[mid]) return store(x, lo, mid);
else return store(x, mid+1, hi);
}
int main(){
FILE *in=fopen("scmax.in","r"), *out=fopen("scmax.out","w");
int n;
fscanf(in, "%d\n", &n);
for(int i=1; i<=n; ++i){
fscanf(in, "%d", &v[i]);
p[i]=store(v[i], 1, lq+1);
if(p[i]==-1)
{--n; --i; }
}
fprintf(out, "%d\n", lq);
print(out, n, lq);
return 0;
}