1. 程式人生 > >luogu 1631 序列合並

luogu 1631 序列合並

tor ret bit 下一個 元素 with reg gist prior

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 序列合並