【PAT甲级】1029 Median (25 分)

题意:

输入一个正整数N(<=2e5),接着输入N个非递减序的长整数。

输入一个正整数N(<=2e5),接着输入N个非递减序的长整数。(重复一次)

输出两组数合并后的中位数。(200ms,合并后排序会超时,利用两组数是有序的进行模拟)

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 long a[200007];
 5 int main(){
 6     int n;
 7     cin>>n;
 8     for(int i=1;i<=n;++i)
 9         cin>>a[i];
10     int m;
11     cin>>m;
12     long x;
13     int l=0,r=n+m;
14     int mid=(l+r-1)/2+1;
15     int cnt=0;
16     ++l;
17     for(int i=1;i<=m;++i){
18         cin>>x;
19         while(l<=n&&a[l]<x){
20             ++cnt;
21             if(cnt==mid)
22                 cout<<a[l];
23             ++l;
24         }
25         ++cnt;
26         if(cnt==mid)
27             cout<<x;
28     }
29     while(l<=n){
30         ++cnt;
31         if(cnt==mid)
32             cout<<a[l];
33         ++l;
34     }
35     return 0;
36 }

 

 

 

posted @ 2019-09-10 23:47  sewage  阅读(184)  评论(0编辑  收藏  举报