其他分享
首页 > 其他分享> > 两个有序数组间相加和的Topk问题

两个有序数组间相加和的Topk问题

作者:互联网

题目

分析

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N], b[N];
using LL = long long;
using VT = vector<LL>;
int main(){
	int n, k;
	cin>>n>>k;
	for(int i = 0; i < n; i++) cin>>a[i];
	for(int i = 0; i < n; i++) cin>>b[i];
	sort(a, a+n);
    sort(b, b+n);
	priority_queue<VT> pq;
    pq.push({a[n-1]+b[n-1],n-1,n-1});
    unordered_set<pair<int, int>> st;
    while(k--){
        auto t =pq.top();
		pq.pop();
        int sum = t[0], i=t[1],j=t[2];
        printf("%d ",sum);
        if(i && !st.count({i-1,j})){
            st.insert({i-1, j});
            pq.push({a[i-1]+b[j],i-1,j});
        }
        if(j && !st.count({i,j-1})){
            st.insert({i, j-1});
            pq.push({a[i]+b[j-1],i,j-1});
        }
    }
	return 0;
} 

标签:pq,int,相加,cin,st,Topk,数组,push,using
来源: https://blog.csdn.net/SYaoJun/article/details/120609317