博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[51nod1685]第k大区间
阅读量:5281 次
发布时间:2019-06-14

本文共 1673 字,大约阅读时间需要 5 分钟。

Description

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

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

Input

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

Output

一个数表示答案.

Sample Input

4 33 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
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define N 100005using namespace std;typedef long long ll;ll a[N],b[N],k;int s[2][N*3],sum[N],n,m,l,r,mid;inline int lowbit(int x){ return x&(-x);}inline int ask(int k,int j){ int ret=0; 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,0,sizeof(s)); for(int i=1;i<=n;++i) if(a[i]>=x) sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; for(int i=1,tmp;i<=n;++i){ tmp=(sum[i]<<1)-i+n; cnt+=(ll)(ask(tmp,i&1^1)); add(tmp,i&1); if((i&1)&&(sum[i]<<1)-i>=0LL) ++cnt; } return cnt>=k;}inline void init(){ scanf("%d%lld",&n,&k); for(int i=1;i<=n;++i){ scanf("%lld",&a[i]); b[i]=a[i]; } l=1;r=n;m=n*3; sort(b+1,b+1+n); while(l
>1; if(chk(b[mid])) l=mid; else r=mid-1; } printf("%lld\n",b[l]);}int main(){ freopen("kth.in","r",stdin); freopen("kth.out","w",stdout); init(); fclose(stdin); fclose(stdout); return 0;}

转载于:https://www.cnblogs.com/AireenYe/p/6218701.html

你可能感兴趣的文章
php做的一个简易爬虫
查看>>
x的x次幂的值为10,求x的近似值
查看>>
hdu-5009-Paint Pearls-dp
查看>>
Codeforces Round #246 (Div. 2)
查看>>
内存泄漏调查
查看>>
jquery获取html元素的绝对位置和相对位置的方法
查看>>
谈谈spring
查看>>
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
MySQL 5.7社区版安装实践
查看>>
vue-auto-focus: 控制自动聚焦行为的 vue 指令
查看>>
docker入门学习(四) 安装nginx及配置
查看>>
有人物联网数传终端设备在智慧电力和公共事业中的应用
查看>>
《剑指offer》第三_二题(不修改数组找出重复的数字)
查看>>
windows 核心编程第一章:关于错误
查看>>
好设计,迁移不费劲
查看>>
orz gzy
查看>>
JAVA源码分析------锁(1)
查看>>
HDU 4920 Matrix multiplication
查看>>
ACdream 1068
查看>>