【2017中国大学生程序设计竞赛-哈尔滨站】B - K-th Number
原题:


题意:
给你一个长度为N的正整数组A,对于这个数组的所有子区间,若长度小于k则不管它,若长度大于等于k则取第k大放入数组B
问你B中第M大的数是谁
一眼序列分治,然而没思路
数据结构?能想到从大到小排序,然后小于第i个数的都视为1,用数据结构维护第i个数在多少个区间是第k大
然后就没有然后了……
序列分治和数据结构自闭了两个小时,最后才想起来试试别的思路
比如DP或二分什么的
终于灵稽一动
答案满足二分单调性
二分的答案m越大,[m+1,n]中的数作为第k大的区间的总数量就越大
那么二分一个答案m,问题转化为求[m+1,n]中的数作为第k大的区间的总数量
因为只需要[m+1,n]中的任意一个数作为第k大,而[1,m]的数没有任何用,可以无视
那么可以把大于m的数看成1,小于等于m的数k看成0
问题转化为统计有多少个子区间,使得区间内有k个1
只需要O(n)复杂度,可以双指针,左边指针i每次加1,如果经过1就让区间中1的减1,如果1的个数小于k,就让右边的指针j往右跑到刚好等于k为止,把n-j+1统计到结果即可
注意二分的写法,容易写错
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define LL long long
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
int n,o; LL m;
int a[];
int b[];
LL cclt(int x){
for(int i=;i<=n;++i) b[i]=(a[i]>=x);
LL bwl=;
for(int i=,j=,k=;i<=n && j<=n;++i){
for(;k!=o && j<n;) k+=b[++j];
if(j>n || (j==n && k!=o)) break;
bwl+=n-j+;
k-=b[i];
}
return bwl;
}
int bnrsch(int x,int y){
int l=x,r=y,md;
while(l+<r){
md=(l+r)>>;
(cclt(md)>=m ? l : r)=md;
}
return cclt(r)>=m ? r : l;
}
int main(){
//freopen("ddd.in","r",stdin);
int T; cin>>T;
while(T --> ){
cin>>n>>o>>m;
int mx=,mn=;
for(int i=;i<=n;++i){
a[i]=rd();
mx=max(mx,a[i]);
mn=min(mn,a[i]);
}
printf("%d\n",bnrsch(mn,mx));
}
return ;
}
【2017中国大学生程序设计竞赛-哈尔滨站】B - K-th Number的更多相关文章
- HDU6237-A Simple Stone Game-找素因子(欧拉函数)-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- HDU6235-Permutation-水题-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- HDU 6237.A Simple Stone Game-欧拉函数找素因子 (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- HDU 6235.Permutation (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- 2017中国大学生程序设计竞赛-哈尔滨站 Solution
A - Palindrome 题意:给出一个字符串,找出其中有多少个子串满足one-half-palindromic 的定义 思路:其实就是找一个i, j 使得 以i为中轴的回文串长度和以j为中轴的 ...
- 2017中国大学生程序设计竞赛-哈尔滨站 A - Palindrome
Palindrome Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tota ...
- 2017中国大学生程序设计竞赛-哈尔滨站 H - A Simple Stone Game
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- HDU 6273.Master of GCD-差分数组 (2017中国大学生程序设计竞赛-杭州站-重现赛(感谢浙江理工))
Super-palindrome 题面地址:http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf 这道题是差分数组的题目,线 ...
- 2017中国大学生程序设计竞赛 - 女生专场 Deleting Edges(思维+最短路)
Deleting Edges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
随机推荐
- python-爬虫-scrapy
入门: 下载:pip install scrapy 工程:scrapy startproject 工程名 Spider: scrapy genspider 爬虫名 url (--nolog//可选不 ...
- androidstudio出包问题--Warning: there were 1 unresolved references to classes or interfaces.
问题:存在unresolved的类或接口导致打包失败 Warning: there were 1 unresolved references to classes or interfaces. You ...
- 冒泡排序到demo
package com.lmy.demoSort; /** * 冒泡排序demo * @author Yubaba * */ public class BubbleSort { public stat ...
- php screw加密与破解
一.破解工具之php-screw-brute 1.项目地址 https://github.com/securifybv/php-screw-brute 2.项目介绍 此脚本可以恢复/爆破php scr ...
- 【VS开发】单文档中往视图中加入控件
[VS开发]单文档中往视图中加入控件 标签(空格分隔): [VS开发] 分隔视图的但文档窗口,要显示控件,推荐使用CFormView或者CCtrlView,前者和对话框的做法一致. 在MainFram ...
- 【机器学习】QQ-plot深入理解与实现
QQ-plot深入理解与实现 26JUN June 26, 2013 最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot.Sigh!我承 ...
- 面试总结 | 百度 NLP 实习生
1. 项目简历:主要体现和招聘要求相关的工作,简历要精简,不要给过多冗余信息.对于每个项目,自己做过的工作,里面用到的方法,要很清楚,工作的motivation.意义等也要清楚. 这次面试中我的问题: ...
- Dijkstra(模板)
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...
- 老贾的幸福生活day6 整型和布尔值的转换 字符串讲解 for 循环简介
整型和布尔值的转换: 整型: python 2 整型 int long(长整型) /获取的是整型 python 3 整型 int 获取的是浮点数(小数) 十进制转二进制: print(bin(36)) ...
- WPF 异步加载窗体
加载某个界面时,需要获取数据,而数据返回的时间比较长,这个时候可以异步加载界面. 1.在该窗体的加载事件(Load)中编写以下代码: new Thread(p=>{DataBinding();} ...