正在加载

请稍等

第一次加载可能稍慢

P1631 序列合并 题解

Author: ljc Time: 2025/09/23 Tag: 题解

P1631 序列合并

P1631 序列合并 - 洛谷

题解

首先尝试暴力枚举$N^2$次和,并使用优先队列输出,这样显然无法求出。只能拿到50分。

那么对于排序后的$A_i,B_j$,如果$ij>n$那么必然有至少$n$种比$A_i+B_j$小的方案。我们考虑将$ij>n$的情况减去。

时间复杂度$O(n\sqrt{n})$.

Code

#include<bits/stdc++.h>
using namespace std;
int n,a[100010],b[100010];
int x=1,y=1,minn;
priority_queue<int> pq; // 使用-号改变小根堆
int main(){
    cin >> n;
    for(int i=1;i<=n;i++)cin >> a[i];
    for(int j=1;j<=n;j++)cin >> b[j];
    for(int i=1;i<=n;i++){
        for(int j=1;(j)*(i)<=n;j++){
            pq.push(-a[i]-b[j]);
        }
    }
    for(int i=1;i<=n;i++){
        cout << -pq.top() << " ";
        pq.pop();
    }
    return 0;
}

声明:本博客由作者原创,转载请标明出处。