1 #include2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 priority_queue pq;10 int an[3100];11 int bn[3100];12 13 int main()14 {15 int T;16 cin>>T;17 while(T--)18 {19 int m,n;20 scanf("%d%d",&m,&n);21 for(int i=0;i =0;i--)52 cout<<" "<
解题步骤:
1.将第一序列读入data1向量中,并按升序排序。
2.将数据读入data2向量中,并按升序排序。
将data2[0] + data1[i] ( 0<=i<=n-1)读入dataq向量中
用make_heap对dataq建堆。
然后data2[1] + data1[i] (0<=i<=n-1),如果data2[1] + data1[i]比堆dataq的顶点大,则退出,否则删除
堆的顶点,插入data2[1] + data1[i]。然后是data2[2],...data2[n - 1]
3.将dataq的数据拷贝到data1中,并对data1按升序排序
4.循环2,3步,直到所有数据读入完毕。
5.打印data1中的数据即为结果。
按此方法,每次只需和当前最小的K项中最大的那项比较就行,而不用比较n^m次