WZOI-265合并有序数列

题目描述:

用合并的方法把两个有序数列A、B合并为一个新的有序数列C,不得先合并再排序。提示:从A和B中取小的数进行比较,把两者小的数放到C中,一直继续此操作。

输入格式:

第一行m和n,表示A数列有m个数,B数列有n个数。 
第二行m个从小到大的数 
第三行n个从小到大的数

输出格式:

输出共一行有m+n个有序的数列,两个数之间用一个空格隔开。

样例输入:

5 3
10 20 30 40 50
12 18 36

样例输出:

10 12 18 20 30 36 40 50

提示:

m+n<=1500000

题中任意一个数,均 <= 109

不能混合后排序完成,否则做此题就失去意义了。

时间限制: 1000ms
空间限制: 128MB

代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[1500001],b[1500001],c[1500001];
int main(){
 int m,n,x,s=0,s1=0,z=0;
 cin>>m>>n;
 for(int i=0;i<m;i++){
  	cin>>a[i];
 }
 for(int i=0;i<n;i++){
  	cin>>b[i];
 }
 for(int i=0;i<m+n;i++){
  if(s>=m){
   c[z]=b[s1];
   s1++;
   z++;
  }
  else if(s1>=n){
   c[z]=a[s];
   s++;
   z++; 
  }
  else if(a[s]<=b[s1]){
   c[z]=a[s];
   s++;
   z++;
  }else if(a[s]>b[s1]){
   c[z]=b[s1];
   s1++;
   z++;
  }
 }
 for(int i=0;i<m+n;i++){
  cout<<c[i]<<" ";
 }
 return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值