有序数列第K小
有序数列第K小
题目描述
给出两个长度分别为\(n,m\)的单调非递减数列,求出它们合并后的第\(k\)小值。
输入输出格式
输入格式:
第一行三个数,\(n,m,k\)如题意所述;
第二行\(n\)个数,依次为数列1;
第三行\(m\)个数,依次为数列2;
输出格式:
一个数,表示合并后的第\(k\)小值。
说明
对于所有数据,\(k\le n+mk≤n+m , a_i\le 10^8\),时间限制200ms。
这个题其实考察的是\(logk\)的分治做法
对当前的两个序列,左指针为\(la,lb\),右指针为\(ra,rb\),求当前的第\(k\)小值。
把第\(k\)小值除2,取两个序列之一贡献这么多,得到子问题
注意边界情况
Code:
#include <cstdio>
int min(int x,int y){return x<y?x:y;}
const int N=1000010;
int n,m,k,a[N],b[N];
void divide(int la,int ra,int lb,int rb,int nk)
{
if(la>ra)
{
printf("%d\n",b[lb+nk-1]);
return;
}
if(lb>rb)
{
printf("%d\n",a[la+nk-1]);
return;
}
if(nk==1)
{
printf("%d\n",min(a[la],b[lb]));
return;
}
int lk=nk>>1;
lk=min(lk,min(ra+1-la,rb+1-lb));
if(a[la+lk-1]<b[lb+lk-1])
divide(la+lk,ra,lb,rb,nk-lk);
else
divide(la,ra,lb+lk,rb,nk-lk);
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%d",a+i);
for(int i=1;i<=m;i++) scanf("%d",b+i);
divide(1,n,1,m,k);
return 0;
}
有序数列第K小加强版
加上多次区间询问
Code:
#include <cstdio>
int min(int x,int y){return x<y?x:y;}
const int N=1000010;
int n,m,q,a[N],b[N];
void divide(int la,int ra,int lb,int rb,int nk)
{
if(la>ra)
{
printf("%d\n",b[lb+nk-1]);
return;
}
if(lb>rb)
{
printf("%d\n",a[la+nk-1]);
return;
}
if(nk==1)
{
printf("%d\n",min(a[la],b[lb]));
return;
}
int lk=nk>>1;
lk=min(lk,min(ra+1-la,rb+1-lb));
if(a[la+lk-1]<b[lb+lk-1])
divide(la+lk,ra,lb,rb,nk-lk);
else
divide(la,ra,lb+lk,rb,nk-lk);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",a+i);
for(int i=1;i<=m;i++) scanf("%d",b+i);
scanf("%d",&q);
int l1,l2,r1,r2,k;
for(int i=1;i<=q;i++)
{
scanf("%d%d%d%d%d",&l1,&r1,&l2,&r2,&k);
divide(l1,r1,l2,r2,k);
}
return 0;
}
2018.7.26
有序数列第K小的更多相关文章
- 求两个有序数组的中位数或者第k小元素
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...
- 两个有序数列找第k小
给定一个数组,数组中的数据无序,在一个数组中找出其第k个最小的数,例如对于数组x,x = {3,2,1,4,5,6},则其第2个最小的数为2 两个有序数组 找第k小 * 方案一 合并遍历 * 二:游 ...
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- 现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值
问题描述:现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值 思路:参照两个数组归并的过程,每次选取最小的数据进行比较 ...
- 【medium】4. Median of Two Sorted Arrays 两个有序数组中第k小的数
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...
- Ex 2_22 两个有序列表合并后的第k小元素..._第四次作业
package org.xiu68.ch02; public class Ex2_22 { public static void main(String[] args) { // TODO Auto- ...
- 每天一道算法题目(18)——取等长有序数组的上中位数和不等长有序数组的第k小的数
1.取上中位数 题目: 给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数.要求:时间复杂度O(logN). 例如: arr1 = {1, ...
- Leetcode 378.有序矩阵中第k小的元素
有序矩阵中第k小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, ...
- [LeetCode] 378. Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
随机推荐
- mac使用brew或者tomcat启动jenkins后配置文件路径
在mac下使用brew命令或tomcat安装jenkins,启动后要输入密码,密码不知道,又找不到config.xml,找了半天原来 config.xml在/Users/qiaojiafei/.jen ...
- 根据wsdl生成服务端代码
场景描述 最近在和一家公司做业务接口对接,由他们那边回调我们这边,对方直接扔过来一个webservice的wsdl文件,让我们按照他们的规范来做webservice服务, 大多数的对接应该是我们创建完 ...
- gitlab-登录账户遇到ERROR: Permission to XXX.git denied to user报错怎么办
碰到这个问题就意味着没有访问账户的权限,没有把访问电脑与访问账户用ssh_key关联起来,解决流程: 1.查看本地是否有ssh_key 笔者用的是git bash来输入命令 ls -al ~/.ssh ...
- Linux命令应用大词典-第37章 Linux系统故障排错
37.1 mkbootdisk:创建用于运行系统的独立启动软盘 37.2 chroot:切换根目录环境 37.3 badblocks:搜索设备的坏块 37.4 mkinitrd:创建要载入ramdis ...
- Unity编辑器 - Undo的坑
Unity编辑器 - Undo的坑 编辑器通过脚本中改变值,Undo.RecordObject可能会无效,应该使用: Undo.RegisterCompleteObjectUndo(Object ob ...
- Visual Studio Code——PHP Debug扩展
最近在使用PHP开发,使用了很多IDE,发现都不是很顺手,之前一直都在使用Sublime Text,但是作为一个爱折腾的人,当我发现VS Code以后觉得很是很适合自己的编程需要的.配置过程中遇到了一 ...
- python同时遍历两个list
两个list, 有对应关系,希望同时完成遍历 用迭代器迭代的方法也不是不可以,python提供了更直观的方法: 可以使用zip把两个list打包 , 类似: list1 = [1,2,3,4] lis ...
- ELK部署方法
最近经理开会说公司要安装ELK日志管理让我们搭建ELK,下面是我搭建步骤和流程,用三台机测试机器搭建的. 软件包我都 给你们放/usr/local/src/elk目录下安装目录都放在/usr/loca ...
- Python实现个性化推荐一
现如今,网站用推荐系统为你提供个性化的体验,告诉你买啥,吃啥甚至你应该和谁交朋友.尽管每个人口味不同,但大体都适用这个套路.人们倾向于喜欢那些与自己喜欢的其他东西相似的东西,也倾向于与自己身边的人有相 ...
- 基于Hadoop2.5.0的集群搭建
http://download.csdn.net/download/yameing/8011891 一. 规划 1. 准备安装包 JDK:http://download.oracle.com/otn ...