Cod sursa(job #3184699)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 16 decembrie 2023 16:00:21
Problema Teren Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#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;
}