Pagini recente » Cod sursa (job #3165363) | Cod sursa (job #665567) | Borderou de evaluare (job #1976985) | Cod sursa (job #2778903) | Cod sursa (job #3184699)
#include <fstream>
using namespace std;
ifstream cin("interclasare.in");
ofstream cout("interclasare.out");
int a[10001],b[10001],c[20002],n,m,i,ta,tb,k,dp[20002],e;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
cin>>m;
for(i=1;i<=m;i++)
cin>>b[i];
ta=tb=1;
/// cum trebuie interclasate sirurile????
while(ta<=n&&tb<=m){
if(a[ta]<=b[tb])
c[++k]=a[ta++];
else
c[++k]=b[tb++];
}
if(ta<=n){
while(ta<=n)
c[++k]=a[ta++];
}else {
while(tb<=m)
c[++k]=b[tb++];
}
for(i=1;i<=k;i++){
if(c[i]>=c[dp[e]]){
dp[++e]=i;
continue;
}
int st=1,dr=e,poz=0;
while(st<=dr){
int mid=(st+dr)/2;
if(c[i]>=c[dp[mid]])
st=mid+1;
else{
dr=mid-1;
poz=mid;
}
}
if(poz!=0)
dp[poz]=i;
}
cout<<e<<'\n';
for(i=1;i<=k;i++)
cout<<c[i]<<" ";
return 0;
}