题意:给定一个数列A和一个空的数列B,从数列a中选取大于等于k的连续序列长度的第k大数放进b序列中,再从b序列中找出第m大数。
题解:这个题是通过二分答案+尺取法(判断条件)来解决的
二分答案:我们通过二分答案来猜测这个第m大的数到底是多少,如果猜大了,那么我们就把他往小区间缩,如果猜小了就把他往大区间缩,这就是二分答案的一个基本过程。
check函数:我们如何判断这个数到底是大了还是小了呢,这是一个关键问题,因为我们二分的是b数组的第m大数,这个第m大数取决于有多少个序列中第k大数是大于m的。
这里就需要尺取法了,设想一下,假如已经找出k个大于等于我们猜测的x的数了,那么我们之后再增加其他的元素,第k大数只会增大而不会减小,然后我们ans+=n-r+1,因为到r的时候,第k大数就已经>=我们所猜想的x了,也就是说区间[l-r],[l-r+1],[l-r+2]…都是符合条件的区间,所以我们将其区间个数统计出来。
然后我们再令缩短[l-r]区间的长度,从左边缩短
如何缩短?当l小于我们所猜测的x时,我们ans+=n-r+1,因为区间[l+1,r]与区间[l,r]是不一样的区间。
如果遇到大于等于x的数,那就意味着我们当前序列中大于x的数已经不够k个了,所以继续拓宽r。
重复以上操作。

#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1e9+7;
using namespace std;
ll n,k,m;
int a[maxn];
bool check(ll x){ll ans=0,cnt=0;int l=1,r=1;while (r<=n){if(a[r]>=x) cnt++;if(k==cnt){ans+=n-r+1;while (a[l]<x){ans+=n-r+1;l++;}l++,cnt--;}r++;}if(ans>=m) return true;else return false;}
int main()
{int t;cin>>t;while (t--){cin>>n>>k>>m;for(int i=1;i<=n;i++) scanf("%d",&a[i]);ll l=0,r=1e9;ll mid,ans;while (l<=r){mid=(l+r)>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}cout<<ans<<endl;}return 0;
}

[NC14301]K-th Number相关推荐

  1. K - The Number of Products

    K - The Number of Products 题目入口:K - The Number of Products Codeforces:B. The Number of Products 参考网站 ...

  2. leetcode 476. 数字的补数(Java版)| How to extract ‘k’ bits from a given position in a number

    题目 https://leetcode-cn.com/problems/number-complement/ 思路 我们想要返回已知数字的补数(num>=1). 思路: 获取 num 的二进制数 ...

  3. 和至少为k的最短子数组 python_LeetCode 862. 和至少为 K 的最短子数组

    最近刷LeetCode题目的一些思路,题目信息 返回A 的最短的非空连续子数组的长度,该子数组的和至少为 K .如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1:输入:A = [1], K ...

  4. POJ3111 K Best —— 01分数规划 二分法

    题目链接:http://poj.org/problem?id=3111 K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissio ...

  5. 斯坦福CS231n项目实战(一):k最近邻(kNN)分类算法

    我的网站:红色石头的机器学习之路 我的CSDN:红色石头的专栏 我的知乎:红色石头 我的微博:RedstoneWill的微博 我的GitHub:RedstoneWill的GitHub 我的微信公众号: ...

  6. K for the Price of One(EASY HARD)

    This is the easy version of this problem. The only difference is the constraint on k - the number of ...

  7. 数组中的第K个最大元素

    数组中的第K个最大元素 在未排序的数组中找到第k个最大的元素.请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素. 示例 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  8. K BEST(最大化平均值)

    K BEST(最大化平均值) Demy has n jewels. Each of her jewels has some value vi and weight wi.Since her husba ...

  9. 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数,求组成的新数最小的删数方案(O((n-k)logk)优化)

    问题描述 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数.对于给定的n和k,设计⼀个算法,找出剩下数字组成的新数最少的删数方案. 这一道题来自zyq老师的算法分析与 ...

  10. 15.CUDA编程手册中文版---附录K CUDA计算能力

    附录K CUDA计算能力 更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 ...

最新文章

  1. Linux内存管理学习3 —— head.S中的段页表的建立
  2. 使用 mysql workbench 建议
  3. Python3 的内置函数和闭包
  4. 高级工程师职英语计算机,高级工程师要考英语吗
  5. java怎么处理ajax请求,java怎么用ajax请求?jquery ajax请求后台的简单例子
  6. HyperLogLog原理与在Redis中的使用
  7. java实体类生成mysql表_自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类。...
  8. matlab gui用edit,matlab gui edit 显示
  9. word 插入公式附加右侧编号方法
  10. 如何给客户做产品培训
  11. 51单片机DHT11温湿度ESP8266WiFi手机APP显示设计
  12. GBase 8a里通过rsync加速调度coor节点的扩容和替换效率
  13. HAL库驱动NRF24L01实现数据传输
  14. 《Python 黑科技》一键分析评论关键词,制作精美词云
  15. 【渝粤题库】陕西师范大学163209 旅游企业战略管理
  16. 丰巢快递柜启动超时收费3元封顶;谷歌市值一夜暴涨5000亿;两行代码构成的npm包影响到了数百万项目 | EA周报...
  17. 邹宇阳:仅成立8个月的个人网站如何月收入几十万美金
  18. tp-link tl-wr740n 虚拟服务器,TP-Link TL-WR740N无线路由器的上网设置教程
  19. bing每日壁纸客户端
  20. 多目标跟踪中的目标是否静止判断——计算目标的速度

热门文章

  1. 信道划分介质访问控制
  2. ACMNO.13求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 输入 n 输出 和 样例输入 5 样例输出 153
  3. 基于关键帧的RGB-D视觉惯性里程计
  4. 干货 | OpenCV中KLT光流跟踪原理详解与代码演示
  5. 2020新款手机,吃鸡贼爽!包邮送一个!
  6. 合唱队形(递增再递减的最长子序列)
  7. 两年AI研究经验(教训)总结,进来看看吧!
  8. 彭旭老师《项目管理中的领导力与团队建设》
  9. 必须要懂得的密码技术
  10. Linq之延迟加载特性