当前位置: 首页 > wzjs >正文

做网站的公司利润html网页制作软件有哪些

做网站的公司利润,html网页制作软件有哪些,云南小程序开发哪家好,广州公司注册最新流程P1631 序列合并 题目描述 有两个长度为 N N N 的单调不降序列 A , B A,B A,B,在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和,求这 N 2 N^2 N2 个和中最小的 N N N 个。 输入格式 第一行一个正整数 N N N; 第二行 …

P1631 序列合并

题目描述

有两个长度为 N N N单调不降序列 A , B A,B A,B,在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和,求这 N 2 N^2 N2 个和中最小的 N N N 个。

输入格式

第一行一个正整数 N N N

第二行 N N N 个整数 A 1 … N A_{1\dots N} A1N

第三行 N N N 个整数 B 1 … N B_{1\dots N} B1N

输出格式

一行 N N N 个整数,从小到大表示这 N N N 个最小的和。

输入输出样例 #1

输入 #1

3
2 6 6
1 4 8

输出 #1

3 6 7

说明/提示

对于 50 % 50\% 50% 的数据, N ≤ 1 0 3 N \le 10^3 N103

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 5 1 \le N \le 10^5 1N105 1 ≤ a i , b i ≤ 1 0 9 1 \le a_i,b_i \le 10^9 1ai,bi109

题解

本题可以将所有序列的和都算出来,然后排序,输出前 N N N 个。

但是这样的时间复杂度为 O ( N 2 ) O(N^2) O(N2),会超时。

所以我们需要优化。

本题的关键在于单调不降

那么显然,对于合并即相加后的序列,其一定是单调不降的。

即:

  • a[1] + b[1] ≤ a[1] + b[2] ≤ a[1] + b[3] ≤ … ≤ a[1] + b[n] ;
  • a[2] + b[1] ≤ a[2] + b[2] ≤ a[2] + b[3] ≤ … ≤ a[2] + b[n] ;

我们可以列表(横向b递增,竖向a递增):

a[1] + b[1]a[1] + b[2]a[1] + b[3]············a[1] + b[n]
a[2] + b[1]a[2] + b[2]a[2] + b[3]············a[2] + b[n]
a[3] + b[1]a[3] + b[2]a[3] + b[3]············a[3] + b[n]
····························································
a[n] + b[1]a[n] + b[2]a[n] + b[3]············a[n] + b[n]

对于整个表,最小的一项一定是a[1] + b[1],次小的一定是a[1] + b[2]或a[2] + b[1],以此类推。

那我们可以用小根堆来维护这个表。

每次取出最小的一项,然后将其下一项加入队列。

这样的时间复杂度为 O ( N l o g N ) O(NlogN) O(NlogN)

具体来说,根据题意我们需要找出前 N N N 小的和,所以我们需要维护一个大小为 N N N 的优先队列。

那么我们可以先计算出第一行,即a[1] + b[1]到a[1] + b[n],然后将其加入优先队列。

然后我们可以取出队列中的最小值,即a[1] + b[1],然后将其下一项a[2] + b[1]加入队列。

代码实现

#include <iostream>
#include <queue>
using namespace std;const int N = 1e5 + 10;int n;
int a[N],b[N];struct node{int sum;int i,j;bool operator < (const node& x) const{return sum > x.sum;}
};priority_queue<node> heap;int main(){cin >> n;for(int i = 1;i <= n;i++) cin >> a[i];for(int i = 1;i <= n;i++) cin >> b[i];for(int i = 1;i <= n;i++){heap.push({a[i] + b[1],i,1});}for(int k = 1;k <= n;k++){auto t = heap.top();heap.pop();int sum = t.sum,i = t.i,j = t.j;cout << sum << " ";if(j <= n) heap.push({a[i] + b[j + 1],i,j + 1});}return 0;
}
http://www.dtcms.com/wzjs/134374.html

相关文章:

  • 网站格式有哪些活动软文模板
  • 排名网站却搜不到新泰网站设计
  • 建个普通网站多少钱竞价托管sem服务
  • 做参茸产品的网站产品推广方法有哪些
  • 宁波网站推广平台推荐快速排名生客seo
  • vps建立多个网站营销方式有哪些
  • 网站建设怎么寻找客户怎么做盲盒
  • 杭州网站建设公司 4000262263腾讯广告联盟
  • 网站建设 需求苏州关键词优化怎样
  • 网站要精细是什么意思网站制作公司排名
  • 网站制作感受营销软文范文200字
  • 统计二级域名的网站流量有什么用外贸网站推广方法之一
  • 做外贸必须有公司网站么苏州seo关键词优化外包
  • 网站建设广告平台推广无锡网站优化
  • 网站建设心得总结商丘seo教程
  • 一加手机官网网站免费推广平台哪些比较好
  • 做网站负责人风险seo入门教程网盘
  • 网站建设 收费标准百度统计
  • 张掖高端网站建设公司谷歌外贸平台推广需要多少钱
  • 想在公司局域网做建网站地推平台去哪里找
  • 安全的企业网站开发广州seo网络优化公司
  • 网站建设合同任世界足球排名
  • seo综合查询是什么爱站工具seo综合查询
  • 广州冼村小学360优化大师下载
  • 做电商网站注意什么问题论文收录网站有哪些
  • 网站建设实施文档百度网站推广一年多少钱
  • 做网站和做java的区别sem优化软件选哪家
  • 成都网站原创网络软文营销是什么意思
  • 网站虚拟主机购买教程新闻联播俄罗斯与乌克兰
  • 深圳网站建设找智恒网络企业网站搜索优化网络推广