码迷,mamicode.com
首页 > 其他好文 > 详细

luogu 1631 序列合并

时间:2018-09-02 16:10:35      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:air   gre   维度   [1]   nbsp   const   列合并   使用   pre   

priority_queue的使用,注意

a[1]+b[1],a[1]+b[2],a[1]+b[3],a[1]+b[4].......a[1]+b[n]

a[2]+b[1].........

..

a[n]+b[1].......a[n]+b[n]

先放入每一行的第1个,a代表行,b代表列,弹出的值在哪一行,再新加入这一行的下一个元素

类似cdq减少维度

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++) 
using namespace std;
const int N=100050;

int a[N],b[N],k[N],n;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    rep(i,1,n) cin>>a[i];
    rep(i,1,n){
        cin>>b[i];k[i]=1;
        q.push(pair<int,int>(a[i]+b[1],i));
    }while(n--){
        pair<int,int> u=q.top();q.pop(); 
        printf("%d ",u.first);
        int i=u.second;
        q.push(pair<int,int>(a[i]+b[++k[i]],i));
    }return 0;
}

 

luogu 1631 序列合并

标签:air   gre   维度   [1]   nbsp   const   列合并   使用   pre   

原文地址:https://www.cnblogs.com/asdic/p/9574011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!