Description

定义一个长度为奇数的区间的值为其所包含的的元素的中位数.

现给出$n$个数,求将所有长度为奇数的区间的值排序后,第$k$大的值为多少.

Input

第一行两个数$n$和$k$.第二行$n$个数$a_i$.

Output

一个数表示答案.

Sample Input

4 3
3 1 2 4

Sample Output

2

HINT

$1\;\leq\;n\;\leq\;10^5,k\;\leq\;$奇数区间的数量,$0\;\leq\;a_i<2^{31}$

Solution

二分答案$ans$,统计长度为奇数的区间的值$\;\geq\;ans$的区间数.

把所有$a_i\;\geq\;ans$的位置标为$1$,所有$a_i<ans$的位置标为$0$,求出前缀和$sum[\;]$.

则值$\;\geq\;ans$的区间$[j,i]$满足条件$sum_i-sum_{j-1}>\frac{i-j+1}{2}$($i,j$同号).

移项得,$2\;\times\;sum_i-i>2\;\times\;sum_{j-1}-(j-1)$.

即用树状数组维护顺序对即可.

#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100005
using namespace std;
typedef long long ll;
ll a[N],b[N],k;
int s[][N*],sum[N],n,m,l,r,mid;
inline int lowbit(int x){
return x&(-x);
}
inline int ask(int k,int j){
int ret=;
for(int i=k;i;i-=lowbit(i))
ret+=s[j][i];
return ret;
}
inline void add(int k,int j){
for(int i=k;i<=m;i+=lowbit(i))
++s[j][i];
}
inline bool chk(ll x){
ll cnt=0LL;
memset(s,,sizeof(s));
for(int i=;i<=n;++i)
if(a[i]>=x) sum[i]=sum[i-]+;
else sum[i]=sum[i-];
for(int i=,tmp;i<=n;++i){
tmp=(sum[i]<<)-i+n;
cnt+=(ll)(ask(tmp,i&^));
add(tmp,i&);
if((i&)&&(sum[i]<<)-i>=0LL) ++cnt;
}
return cnt>=k;
}
inline void init(){
scanf("%d%lld",&n,&k);
for(int i=;i<=n;++i){
scanf("%lld",&a[i]);
b[i]=a[i];
}
l=;r=n;m=n*;
sort(b+,b++n);
while(l<r){
mid=(l+r+)>>;
if(chk(b[mid])) l=mid;
else r=mid-;
}
printf("%lld\n",b[l]);
}
int main(){
freopen("kth.in","r",stdin);
freopen("kth.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

[51nod1685]第k大区间的更多相关文章

  1. 51nod-1686 第K大区间(二分+尺取法)

    题目链接: 第K大区间 基准时间限制:1 秒 空间限制:131072 KB    定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input 第一行两个数 ...

  2. 51nod 第K大区间2(二分+树状数组)

    题目链接: 第K大区间2 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 定义一个长度为奇数的区间的值为其所包含的的元素的中位数.中位数_百度百科 现给出n个数,求将所有长度为 ...

  3. 51nod 1686 第k大区间

    1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...

  4. 1686 第K大区间(尺取+二分)

    1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...

  5. 51nod 1686 第K大区间2

    1685 第K大区间2 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百科 Input 第一行两个数n和k(1<=n ...

  6. 51NOD 1686 第K大区间 二分

    第k大区间   定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input   第一行两个数n和k(1<=n<=100000,k<=n* ...

  7. 51Nod1686 第K大区间 和 NOI2016 区间

    谈一下尺取法的经典题. 第K大区间 定义一个区间的值为其众数出现的次数. 现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数:区间里出现次数最多的数字,例如:1 1 2 2 2,区间[1 ...

  8. 1686 第K大区间

    1686 第K大区间 时间限制:1 秒 空间限制:131072 KB   定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百 ...

  9. 51 NOD 1685 第K大区间2 二分+BIT

    题目描述: 定义一个长度为奇数的区间的值为其所包含的的元素的中位数. 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. 样例解释: [l,r]表示区间的值 [1]:3 [2]:1 ...

随机推荐

  1. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  2. nginx反向代理tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题

    问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...

  3. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  4. 基于LeNet网络的中文验证码识别

    基于LeNet网络的中文验证码识别 由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013 ...

  5. hadoop:将WordCount打包成独立运行的jar包

    hadoop示例中的WordCount程序,很多教程上都是推荐以下二种运行方式: 1.将生成的jar包,复制到hadoop集群中的节点,然后运行 $HADOOP_HOME/bin/hadoop xxx ...

  6. CoreBluetooth——IOS蓝牙4.0使用心得

    原文链接:http://m.blog.csdn.net/article/details?plg_nld=1&id=51014318&plg_auth=1&plg_uin=1&a ...

  7. Pattern Recognition And Machine Learning读书会前言

    读书会成立属于偶然,一次群里无聊到极点,有人说Pattern Recognition And Machine Learning这本书不错,加之有好友之前推荐过,便发了封群邮件组织这个读书会,采用轮流讲 ...

  8. 这些javascript面试题,你做对了几道?

    1.---------------------------------------------------- var fun = function(){ this.name = 'peter'; re ...

  9. 反射 实现不同模型相同属性赋值 第二集(automapper)

    前言: 两年前写过一个 反射实现不同模型相同属性赋值 只能简单的实现两个model 相同属性名,相同类型赋值 最近又遇到这个问题,需要对相同属性名或者指定属性名 不同类型(复杂对象,如:List< ...

  10. SDRAM读写一字(下)

    SDRAM读写一字 SDRAM控制模块 上电后进行初始化状态,初始化完成后进入空闲状态,在此进行判断如下判断: 如果自刷新时间到,则进行自刷新操作,操作完成后重新进入空闲状态: 如果读使能有效则进行读 ...