51nod 第K大区间2(二分+树状数组)
题目链接:
定义一个长度为奇数的区间的值为其所包含的的元素的中位数。中位数_百度百科
现给出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 个询问,每次单点修改,询问是否存在一个 ...
随机推荐
- Minus-C 一个最小化的C语言规范
资深C++程序员都不会对C++编程规范太陌生,C++实在太复杂,以至于所有项目都需要裁剪一个子集共项目组内使用.经过在家休息这一小段时间,我发现其实C语言更需要一个相同的规范,这就是本文的目标,最大可 ...
- Oracle Job相关
Oracle JOB的建立,定时执行任务 begin sys.dbms_job.submit(job => :job, ...
- easyui combobox筛选(拼音)
1.combobox本身的筛选 $('#cc').combobox({ filter: function(q, row){ var opts = $(this).combobox('options') ...
- 用CToolBarCtrl类为对话框创建工具栏
---恢复内容开始--- 首先CToolBarCtrl类内部维护了三个重要的数据结构:一个图像列表,一个字符串列表,一个TBBUTTON结构体的列表. 知道了这一点,下面的理解起来就轻松了.慢慢来: ...
- C++ Bit Fields
http://msdn.microsoft.com/en-us/library/ewwyfdbe%28v=vs.71%29.aspx Note An unnamed bit field of widt ...
- 对Slony-I中wait on的理解
http://slony.info/documentation/2.1/advanced.html#AEN1425 4.1.2. Event Confirmations When an event i ...
- UIImage imageNamed 与 imageWithContentsOfFile的差别
[UIImage imageNamed:]仅仅适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage载入本地图像最经常使用的是以下三种: 1.用imageNamed方法 [UI ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
- 转换到 COFF 期间失败: 文件无效或损坏 解决方法
转自csdn 终极解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输 ...
- 王立平--EditPlus激活码
注冊名:Free User 注冊码:6AC8D-784D8-DDZ95-B8W3A-45TFA