AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组
原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html
题目传送门 - ARC101D
题意
给定一个序列 A 。
定义一个序列 A 的中位数为:给 A 排序,得到的第 $\left\lfloor\cfrac{i}{2}\right\rfloor+1$ 项的值。
序列 B 由序列 A 的所有连续子序列的中位数构成。
问序列 B 的中位数是多少。
序列中可能出现重复的数,$|A| \leq 10^5$ 。
题解
注意这里说的“中位数”是题意里面定义的“中位数”。
首先考虑二分答案。
对于一个数 $k$ ,我们考虑判断最终序列的中位数是否 大于等于 $k$。
考虑将原序列中 大于等于 $k$ 的数全部设置为 $1$,小于 $k$ 的数设为 $-1$ 。那么,如果一个序列的和 非负,它原来的中位数就必然大于等于 $k$ 。
考虑用树状数组统计出中位数大于等于 $k$ 的序列个数 $ans$ 。
如果 $ans\geq \cfrac{n(n+1)}4$ ,那么显然,序列 B 的中位数大于等于 $k$ 。
于是就可以在 $O(n\log^2 n)$ 的时间复杂度内解决这个问题了。
代码
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long LL;
- const int N=200005;
- int n,a[N],Ha[N],hs,k,f[N];
- struct BIT{
- int n,c[N];
- void set(LL _n){
- n=_n;
- memset(c,0,sizeof c);
- }
- void add(int x,int d){
- for (;x<=n;x+=x&-x)
- c[x]+=d;
- }
- int ask(int x){
- int ans=0;
- for (;x;x-=x&-x)
- ans+=c[x];
- return ans;
- }
- }T;
- bool check(int k){
- for (int i=1;i<=n;i++)
- f[i]=f[i-1]+(a[i]>=k?1:-1);
- T.set(n*2+1);
- LL ans=0;
- for (int i=0;i<=n;i++){
- ans+=T.ask(f[i]+n+1);
- T.add(f[i]+n+1,1);
- }
- return ans>=1LL*n*(n+1)/4;
- }
- int main(){
- scanf("%d",&n);
- for (int i=1;i<=n;i++)
- scanf("%d",&a[i]),Ha[i]=a[i];
- sort(Ha+1,Ha+n+1);
- hs=unique(Ha+1,Ha+n+1)-Ha-1;
- for (int i=1;i<=n;i++)
- a[i]=lower_bound(Ha+1,Ha+hs+1,a[i])-Ha;
- int L=1,R=hs,mid,ans=L;
- while (L<=R){
- mid=(L+R)>>1;
- if (check(mid))
- L=mid+1,ans=mid;
- else
- R=mid-1;
- }
- printf("%d",Ha[ans]);
- return 0;
- }
AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组的更多相关文章
- AtCoder - 4351 Median of Medians(二分+线段树求顺序对)
D - Median of Medians Time limit : 2sec / Memory limit : 1024MB Score : 700 pointsProblem Statement ...
- AtCoder Regular Contest 101 D - Median of Medians
二分答案 然后前缀和+树状数组来判断这个答案是否大于等于数 如果我们对于一个查询,如果小于这个数令为1,大于这个数领为-1 将所有前缀和放在树状数组中,就可以查询所有sum_{l} < sum_ ...
- AtCoder Regular Contest 101
C题是个傻逼题, 一定是先向右,然后停了或者向左走到某一个点(左边同理)模拟就可以了 D题想了一会才想出来 和tjoi那道排序挺像的 二分答案变0/1来做 刚开始写的时候还把自己作为另外一类搞出来 这 ...
- 【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]
Shik and Travel Time Limit: 50 Sec Memory Limit: 512 MB Description 给定一棵n个点的树,保证一个点出度为2/0. 遍历一遍,要求每 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
随机推荐
- LabVIEW版本控制(转)
原文转自https://www.cnblogs.com/EltonLiang/p/7105034.html 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好 ...
- django的内置信号
Model singnalspre_init 在model执行构造方法之前自动触发post_init django的model在执行构造方法之后,自动触发pre_save django的对象保存之前, ...
- C#生成不重复的N位随机数
直接上代码: #region 生成N位随机数 /// <summary> /// 生成N位随机数 /// </summary> /// <param name=" ...
- 42)django-Model _meta API
一:Model _meta API 模型_metaAPI是Django ORM的核心.它使系统的其他部分(如查询,查询,表单和管理员)了解每个模型的功能. API可以通过_meta每个模型类的属性来访 ...
- js——类型转换
总述 类型转换:显式.隐式(自动) 隐式转换是由编译器自动进行的,基本主要抽象操作有ToPrimitive, ToNumber, ToString, ToBoo ...
- python 知识梳理
1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...
- oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案
oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案 解决方案 1.直接引用 Oracle.ManagedDataAccess.Client.dll动态库即 ...
- JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月
本书介绍 一:本书 pdf 获取信息 本书下载:请申请加入本群 (QQ群:668345923), 并联系群主. 本群主有:本书pdf 全文教材 及附带的 光盘内容 二:本书目录介绍 第1篇 基 ...
- Confluence 6 编辑自定义 Decorators
希望对 Confluence 的 decorator 进行编辑的话,你需要具有良好的 HTML 知识和能够理解 Velocity 模板语言. 希望编辑 decorator 文件: 进入 Confl ...
- Confluence 6 布局高级自定义
重载 Velocity 模板 velocity 目录是 Confluence Velocity 模板文件进行搜索时候需要的文件夹.例如,你可以通过将你的 Velocity 文件使用正确的文件名放置到正 ...