Pagini recente » Cod sursa (job #90962) | Cod sursa (job #530368) | Clasamentul arhivei educationale | Cod sursa (job #2881803) | Cod sursa (job #815398)
Cod sursa(job #815398)
#include<stdio.h>
#define N 1000000
int v[N], pu[N], prec[N];
FILE *f, *g;
int binary(int l1,int l2, int x) {
int m;
while(l1<=l2) {
m = (l1+l2)/2;
if((x < v[pu[m]] && x > v[pu[m-1]]))
return m;
else
if(x > v[pu[m]])
l1 = m+1;
else
l2 = m-1;
}
return l2+1;
}
void print(int i) {
if(prec[i])
print(prec[i]);
fprintf(g,"%d ",v[i]);
}
int main(int argc, char* argv[2]) {
f = fopen("scmax.in","r");
g = fopen("scmax.out","w");
int lmax, i, k, n;
lmax = 0;
//citirea datelor de intrare
fscanf(f, "%d", &n);
for(i=1;i<=n;i++)
fscanf(f, "%d", &v[i]);
lmax = 0;
pu[0] = 0;
for(i=1;i<=n;i++) {
k = binary(1,lmax,v[i]);
pu[k] = i;
prec[i] = pu[k-1];
if(k > lmax)
lmax = k;
}
fprintf(g,"%d\n",lmax);
print(pu[lmax]);
fclose(f);
fclose(g);
return 0;
}