合并序列

来源:互联网 发布:网络水军公司bjiko 编辑:程序博客网 时间:2024/06/06 01:13

10.29

思路:
多路并行问题,写了个比较暴力的做法,开O2就是能过的。
同样可以用二分。

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#define LL long long#define N 100010using namespace std;int n;LL lim = 0;LL a[N], b[N], ans[N];priority_queue <LL> q;inline LL read(){    LL x = 0, f = 1; char ch = getchar();    while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); }    while(ch >= '0' && ch <= '9'){ x = x * 10LL + ch - '0'; ch = getchar(); }    return x * f;}int main(){    freopen ("minval.in", "r", stdin);    freopen ("minval.out", "w", stdout);    scanf("%d", &n);    for(register int i=1; i<=n; i++) a[i] = read();    sort(a+1, a+n+1);     for(register int i=1; i<=n; i++) b[i] = read(), q.push(a[1] + b[i]);    sort(b+1, b+n+1);     LL u = q.top();    for(register int i=2; i<=n; i++){        for(register int j=1; j<=n; j++){            if(a[i] + b[j] >= u) break;            q.pop(); q.push(a[i] + b[j]);            u = q.top();        }    }    int idc = 0;    while( !q.empty() ){        u = q.top(); q.pop();        ans[++idc] = u;    }    for(register int i=idc; i>0; i--){        printf("%I64d ", ans[i]);    }}
原创粉丝点击