Pagini recente » Cod sursa (job #1703455) | Cod sursa (job #1697763) | Cod sursa (job #1697822)
#include <stdio.h>
#include <stdlib.h>
short int v[10000], u[10000], p[10000], q[10000], a[20000], i, j, l, l1, l2, lmax, mij, st, dr;
short int f[2][10000];
FILE *fin, *fout;
void scmax(short int x){
st=1, dr=l;
while(st<=dr){
mij=(st+dr)/2;
if(x<q[mij]) dr=mij-1;
else st=mij+1;
}
l+=(st>l);
q[st]=x;
p[i]=st;
}
int main(){
short int n, m;
fin=fopen("interclasare.in", "r");
fout=fopen("interclasare.out", "w");
fscanf(fin, "%hi", &n);
for(i=1; i<=n; i++){
fscanf(fin, "%hi", &v[i]);
scmax(v[i]);
}
lmax+=l; l1=l; l=0; j=n;
for(i=lmax; i; i--){
while(p[j]!=i && j) j--;
a[i]=v[j];
f[0][i]=j;
}
fscanf(fin, "%hi", &m);
for(i=1; i<=m; i++){
fscanf(fin, "%hi", &u[i]);
scmax(u[i]);
}
lmax+=l; l2=l; j=m;
for(i=l2; i; i--){
while(p[j]!=i) j--;
q[i]=u[j];
f[1][i]=j;
}
fprintf(fout, "%hi\n", lmax);
i=j=st=dr=1; mij=0;
while(i<=l1 && j<=l2){
if(a[i]<=q[j]){
for(; st<=f[0][i]; st++)
fprintf(fout, "%hi ", v[st]);
i++;
}
else{
for(; dr<=f[1][j]; dr++)
fprintf(fout, "%hi ", u[dr]);
j++;
}
}
while(st<=n)
fprintf(fout, "%hi ", v[st++]);
while(dr<=m)
fprintf(fout, "%hi ", u[dr++]);
fclose(fin);
fclose(fout);
return 0;
}