原文链接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)$ 的时间复杂度内解决这个问题了。

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int N=200005;
  5. int n,a[N],Ha[N],hs,k,f[N];
  6. struct BIT{
  7. int n,c[N];
  8. void set(LL _n){
  9. n=_n;
  10. memset(c,0,sizeof c);
  11. }
  12. void add(int x,int d){
  13. for (;x<=n;x+=x&-x)
  14. c[x]+=d;
  15. }
  16. int ask(int x){
  17. int ans=0;
  18. for (;x;x-=x&-x)
  19. ans+=c[x];
  20. return ans;
  21. }
  22. }T;
  23. bool check(int k){
  24. for (int i=1;i<=n;i++)
  25. f[i]=f[i-1]+(a[i]>=k?1:-1);
  26. T.set(n*2+1);
  27. LL ans=0;
  28. for (int i=0;i<=n;i++){
  29. ans+=T.ask(f[i]+n+1);
  30. T.add(f[i]+n+1,1);
  31. }
  32. return ans>=1LL*n*(n+1)/4;
  33. }
  34. int main(){
  35. scanf("%d",&n);
  36. for (int i=1;i<=n;i++)
  37. scanf("%d",&a[i]),Ha[i]=a[i];
  38. sort(Ha+1,Ha+n+1);
  39. hs=unique(Ha+1,Ha+n+1)-Ha-1;
  40. for (int i=1;i<=n;i++)
  41. a[i]=lower_bound(Ha+1,Ha+hs+1,a[i])-Ha;
  42. int L=1,R=hs,mid,ans=L;
  43. while (L<=R){
  44. mid=(L+R)>>1;
  45. if (check(mid))
  46. L=mid+1,ans=mid;
  47. else
  48. R=mid-1;
  49. }
  50. printf("%d",Ha[ans]);
  51. return 0;
  52. }

  

AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组的更多相关文章

  1. AtCoder - 4351 Median of Medians(二分+线段树求顺序对)

    D - Median of Medians Time limit : 2sec / Memory limit : 1024MB Score : 700 pointsProblem Statement ...

  2. AtCoder Regular Contest 101 D - Median of Medians

    二分答案 然后前缀和+树状数组来判断这个答案是否大于等于数 如果我们对于一个查询,如果小于这个数令为1,大于这个数领为-1 将所有前缀和放在树状数组中,就可以查询所有sum_{l} < sum_ ...

  3. AtCoder Regular Contest 101

    C题是个傻逼题, 一定是先向右,然后停了或者向左走到某一个点(左边同理)模拟就可以了 D题想了一会才想出来 和tjoi那道排序挺像的 二分答案变0/1来做 刚开始写的时候还把自己作为另外一类搞出来 这 ...

  4. 【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]

    Shik and Travel Time Limit: 50 Sec  Memory Limit: 512 MB Description 给定一棵n个点的树,保证一个点出度为2/0. 遍历一遍,要求每 ...

  5. AtCoder Regular Contest 097

    AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...

  6. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  7. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  8. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  9. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

随机推荐

  1. LabVIEW版本控制(转)

    原文转自https://www.cnblogs.com/EltonLiang/p/7105034.html 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好 ...

  2. django的内置信号

    Model singnalspre_init 在model执行构造方法之前自动触发post_init django的model在执行构造方法之后,自动触发pre_save django的对象保存之前, ...

  3. C#生成不重复的N位随机数

    直接上代码: #region 生成N位随机数 /// <summary> /// 生成N位随机数 /// </summary> /// <param name=" ...

  4. 42)django-Model _meta API

    一:Model _meta API 模型_metaAPI是Django ORM的核心.它使系统的其他部分(如查询,查询,表单和管理员)了解每个模型的功能. API可以通过_meta每个模型类的属性来访 ...

  5. js——类型转换

      总述                   类型转换:显式.隐式(自动) 隐式转换是由编译器自动进行的,基本主要抽象操作有ToPrimitive, ToNumber, ToString, ToBoo ...

  6. python 知识梳理

    1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...

  7. oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案

    oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案 解决方案 1.直接引用  Oracle.ManagedDataAccess.Client.dll动态库即 ...

  8. JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月

    本书介绍 一:本书 pdf 获取信息 本书下载:请申请加入本群 (QQ群:668345923),   并联系群主. 本群主有:本书pdf 全文教材 及附带的 光盘内容 二:本书目录介绍 第1篇  基 ...

  9. Confluence 6 编辑自定义 Decorators

    希望对 Confluence 的 decorator 进行编辑的话,你需要具有良好的 HTML 知识和能够理解  Velocity 模板语言. 希望编辑 decorator 文件: 进入  Confl ...

  10. Confluence 6 布局高级自定义

    重载 Velocity 模板 velocity 目录是 Confluence Velocity 模板文件进行搜索时候需要的文件夹.例如,你可以通过将你的 Velocity 文件使用正确的文件名放置到正 ...