题目描述

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

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

输入输出格式

输入格式:

输入文件名为kth.in。

第一行两个数n和k

第二行,n个数。(0<=每个数<2^31)

输出格式:

一个数表示答案

输入输出样例

输入样例#1:

4 3
3 1 2 4 【样例解释】
[l,r]表示区间l~r的值
[1,1]:3
[2,2]:1
[3,3]:2
[4,4]:4
[1,3]:2
[2,4]:2
输出样例#1:

2

说明

对于30%的数据,1<=n<=100;

对于60%的数据,1<=n<=300

对于80%的数据,1<=n<=1000

对于100%的数据,1<=n<=100000, k<=奇数区间的数

 /*
二分答案t,统计中位数大于等于t的区间有多少个。
设a[i]为前i个数中有a[i]个数>=t,若奇数区间[l,r]的中位数>=t,则(a[r]-a[l-1])*2>r-l+1,即(a[r]*2-r)>(a[l-1]*2-l+1)。
设b[i]=a[i]*2-i,统计每个b[i]有多少个b[j]<b[i](j<i 且 j和i奇偶性不同)
*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 100005
using namespace std; long long n,k,ans;
int a[N],b[N],c[N],f[][N*]; inline int lowbit(int x)
{
return x&-x;
} inline void add(int x,int p)
{
if(x<=) return;
for(;x<=*n;x+=lowbit(x)) f[p][x]++;
} inline int query(int x,int p)
{
if(x<=) return ;
int sum=;
for(;x;x-=lowbit(x)) sum+=f[p][x];
return sum;
} long long check(int x)
{
memset(f,,sizeof(f));
long long sum=;
for(int i=;i<=n;i++)
{
c[i]=c[i-]+(a[i]>=x);
}
for(int i=;i<=n;i++)
{
c[i]=c[i]*-i+n;
}
add(n,);
for(int i=;i<=n;i++)
{
add(c[i],i&);
sum+=query(c[i]-,(i+)&);
}
return sum;
} inline void init()
{
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+,b+n+);
int l=,r=n+,mid=(l+r)>>;
while(l+<r)
{
if(check(b[mid])>=k) l=mid;
else r=mid;
mid=(l+r)>>;
}
printf("%d",b[l]);
} int main()
{
init();
fclose(stdin);fclose(stdout);
return ;
}

最新文章

  1. STL容器
  2. js:方法2. 字符串
  3. ccc 单点触控
  4. android 模拟按键事件
  5. codeforces 22E XOR on Segment 线段树
  6. 利用动软代码生成器 自动生成LINQ需要用的数据实体类 (转)
  7. 蜗牛—JSP学习乘法表页面输出
  8. 记一次synchronized锁字符串引发的坑兼再谈Java字符串
  9. 将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1.3X
  10. bootstrap-table 刷新页面数据
  11. [svc]unix和cpu发展历史
  12. Scala学习(五)练习
  13. LeetCode题解:Flatten Binary Tree to Linked List:别人的递归!
  14. Mac 上flink的安装与启动
  15. unity VideoPlayer
  16. 半夜思考, Java 重载的实现
  17. ubuntu18.04 安装Navicat 解决字体方框问题
  18. 人人网张铁安:Feed系统架构分析(转)
  19. JS字符串的问题
  20. 四则运算生成器(java) 蔡苑菲,陆海燕

热门文章

  1. JavaScript中的原型prototype和__proto__的区别及原型链概念
  2. Junit5中实现参数化测试
  3. 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
  4. Python 3 MySQL数据库操作
  5. 使用jQuery开发tree插件
  6. mysql order by基于时间的盲注
  7. Android 设置横屏
  8. Navicat Premium12激活教程
  9. yum 异常解决一例
  10. Microsoft Onenote shortcuts / Onenote快捷键大全