题目链接:
定义一个长度为奇数的区间的值为其所包含的的元素的中位数。中位数_百度百科
现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少。
样例解释:
[l,r]表示区间的值
[1]:3
[2]:1
[3]:2
[4]:4
[1,3]:2
[2,4]:2
第三大是2
第一行两个数n和k(1<=n<=100000,k<=奇数区间的数量)
第二行n个数,0<=每个数<2^31
一个数表示答案。
4 3
3 1 2 4
2 题意: 思路: 二分答案t,统计中位数大于等于t的区间有多少个。
AC代码:
//#include <bits/stdc++.h>
#include <vector>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<''||CH>'';F= CH=='-',CH=getchar());
for(num=;CH>=''&&CH<='';num=num*+CH-'',CH=getchar());
F && (num=-num);
}
int stk[], tp;
template<class T> inline void print(T p) {
if(!p) { puts(""); return; }
while(p) stk[++ tp] = p%, p/=;
while(tp) putchar(stk[tp--] + '');
putchar('\n');
} const LL mod=1e9+;
const double PI=acos(-1.0);
const LL inf=1e10;
const int N=1e5+; int n,k;
int a[N],b[N],sum[][N]; int lowbit(int x)
{
return x&(-x);
}
void update(int x,int flag)
{
while(x<=n)
{
sum[flag][x]++;
x+=lowbit(x);
}
}
int query(int x,int flag)
{
int s=;
while(x>)
{
s+=sum[flag][x];
x-=lowbit(x);
}
return s;
} struct node
{
int temp,pos,id;
}po[N];
int cmp1(node x,node y)
{
if(x.temp==y.temp)return x.pos<y.pos;
return x.temp<y.temp;
}
int cmp2(node x,node y)
{
return x.pos<y.pos;
}
int check(LL x)
{
mst(sum,);
Riep(n)
{
b[i]=b[i-]+(a[i]>=x?:);
po[i].temp=*b[i]-i;
po[i].pos=i;
}
sort(po+,po+n+,cmp1);
Riep(n)po[i].id=i;
sort(po+,po+n+,cmp2);
LL ans=;
Riep(n)
{
if(po[i].temp>&&i%==)ans++;//包括0的;
ans=ans+query(po[i].id,i&^);
update(po[i].id,i&);
}
if(ans>=k)return ;
return ;
} int main()
{
read(n);read(k);
Riep(n)read(a[i]);
LL l=,r=inf;
while(l<=r)
{
LL mid=(l+r)>>;
if(check(mid))l=mid+;
else r=mid-;
}
print(l-);
return ;
}
51nod 第K大区间2(二分+树状数组)的更多相关文章
-
ACM学习历程—51NOD 1685 第K大区间2(二分 &;&; 树状数组 &;&; 中位数)
http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...
-
【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
-
BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)
题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...
-
hdu-5700 区间交(二分+树状数组)
题目链接: 区间交 Problem Description 小A有一个含有n个非负整数的数列与mm个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些 ...
-
BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 418 Solved: 235 [ Submit][ ...
-
【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
-
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
-
[bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
-
CodeForces992E 二分 + 树状数组(线段树)
http://codeforces.com/problemset/problem/992/E 题意:给定一个序列 ai ,记其前缀和序列为 si ,有 q 个询问,每次单点修改,询问是否存在一个 ...
随机推荐
-
iOS 取绝对值函数
1.abs(a) 处理int类型a的取绝对值 2.fabsf(a) 处理float类型a的取绝对值 3.fabs(a) 处理double类型a的取绝对值
-
BZOJ2434 [Noi2011]阿狸的打字机(AC自动机 + fail树 + DFS序 + 线段树)
题目这么说的: 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: 输入小 ...
-
PHP延迟静态绑定:static关键字
PHP5.3中引入了延迟静态绑定的概念.该特性最明显的标志就是新关键字static.static类似于self,但它指的是被调用的类而不是包含类.在本例中,它的意思是调用Document::creat ...
-
android方向键被锁定的问题
当虚拟机启动的时候,很多情况是旁边的方向键不能点击,处于一种被锁定的状态,解决办法如下: 找到 C:\Users\Administrator(你的用户名)\.android\avd\mm.adv( ...
-
MATLAB中“fitgmdist”的用法及其GMM聚类算法
MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...
-
PAM unable to dlopen(/lib/security/pam_limits.so): /lib/security/pam_limits.so: wrong ELF class: ELFCLASS32
systemctl status sshd● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/ ...
-
(转)Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)
自:http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行 ...
-
Navicat标识为灰
Navicat Premium作为一种通用数据管理工具,非常受迎接.最近,又遇到一个小问题.即为了实现自增,需要设置主键标识,而在Navicat中发现其为灰色,不可用. 原因:Navicat不允许设置 ...
-
Flutter 1.0 正式版: Google 的便携 UI 工具包
Flutter 1.0 正式版: Google 的便携 UI 工具包 文 / Tim Sneath,Google Dart & Flutter 产品组产品经理 Flutter 是 Google ...
-
selenium+python自动化89-用例不通过的时候发送邮件
前言 实现需求:当测试用例全部通过的时候,不发邮件,当用例出现Error或Failure的时候发送邮件 解决思路:生成html测试报告后,用bs4解析html页面,写个函数判断页面上是都有不通过的记录 ...