【51Nod1685】第K大区间2
来源:互联网 发布:中国移动网络测速网址 编辑:程序博客网 时间:2024/05/22 13:42
定义一个长度为奇数的区间的值为其所包含的的元素的中位数。中位数_百度百科
现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少。
样例解释:
[l,r]表示区间的值
[1]:3
[2]:1
[3]:2
[4]:4
[1,3]:2
[2,4]:2
第三大是2
Input
第一行两个数n和k(1<=n<=100000,k<=奇数区间的数量)
第二行n个数,0<=每个数<2^31
Output
一个数表示答案。
Input示例
4 3
3 1 2 4
Output示例
2
题解
这类区间第k大基本二分答案。
记sum[i]表示1-i里大于mid的数的个数
区间符合条件满足2*(sum[R]-sum[L-1])>R-(L-1)
即2*sum[R]-R>sum[L-1]-(L-1) 且为奇区间
代码
#include<bits/stdc++.h>typedef long long ll;using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,a[100005],ls[100005],t[2][300005],sum[100005];ll k;int lowbit(int x){return x&-x;}inline void update(int p,int x){ for (;x<=3*n;x+=lowbit(x))t[p][x]++;}int query(int p,int x){ int ans=0; for (;x;x-=lowbit(x))ans+=t[p][x]; return ans;}bool judge(int mid){ for (int i=1;i<=n;i++) sum[i]=sum[i-1]+(a[i]>=mid); for (int i=1;i<=n;i++) sum[i]=2*sum[i]-i+n; memset(t,0,sizeof(t));update(0,n); ll ans=0; for (int i=1;i<=n;i++) { ans+=query(!(i&1),sum[i]-1); update(i&1,sum[i]); } return ans>=k;}int main(){ n=read();scanf("%lld",&k); for (int i=1;i<=n;i++) a[i]=read(),ls[i]=a[i]; sort(ls+1,ls+n+1); int l=1,r=n; while (l!=r) { int mid=(l+r+1)>>1; if (judge(ls[mid])) l=mid;else r=mid-1; } printf("%d",ls[l]); return 0;}
阅读全文
0 0
- 51nod1685:第K大区间2
- 51nod1685 第K大区间2
- 51nod1685 第K大区间2
- 【51Nod1685】第K大区间2
- 区间第K大
- 第K大区间
- 区间第k大
- 51Nod-1685-第K大区间2
- 51nod1686 第K大区间
- 51nod 第K大区间
- 51nod 1686 第k大区间
- 二分 51Nod1686 第K大区间
- 51nod-1686 第K大区间
- 51Nod-1686-第K大区间
- 51nod 1686 第K大区间
- 51nod1686 第K大区间 【二分】
- 51Nod 1686(第K大区间)
- 51nod 1686 第K大区间
- Ubuntu16.0 安装jdk配置Java环境的方法 (亲测可行)
- KMP算法
- 把字符串"abc.abc.abc"替换为"abc/abc/abc"
- 首次接触框架,struts2初步学习(随笔)
- 51Nod 1463 找朋友
- 【51Nod1685】第K大区间2
- 关于select...where params='' for update 阻塞的原因分析
- 常用排序算法1--冒泡排序,选择排序,插入排序
- AngularJS一系列筛选,添加、显示
- Opencv计算机视觉编程攻略笔记----第一章
- 实验三---熟悉Linux文件目录管理各种功能命令
- 深度卷积神经网络在目标检测中的进展
- TabLayout+ViewPager无限轮播加小圆点,XRecyclerView下拉刷新,加载更多
- 洛谷 P2851 [USACO06DEC]最少的硬币The Fewest Coins