题面在这里!

这种题只能二分答案把qwwq,直接做根本做不了啊。。。

首先你需要知道如何通过 一个区间<=x的数有多少个 来判断x和这个区间中位数的关系。

很显然当数有至少 [L/2]+1 个(L是区间内数的个数)时,x>=该区间的中位数。

你肯定觉得这多简单啊?有啥子用?

第一,它可以转化成,区间内<=x的数比剩下的数多的时候,x>=该区间的中位数,于是就可以做二分里面套的部分。

具体的来说,就是我们二分到一个x的时候,希望知道有多少个区间的中位数<=x。

这个时候只需要把<=x的数设置成1,其他的设置成-1,然后算一算有多少区间的数的和是正数,这显然就是一个离散化+树状数组的傻逼问题。

第二,它还可以用来作最外层的二分判断,调整二分的上下界。

这个比较好想,我就不说了2333。

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e5+5;int n,m,f[N],ans,a[N],mid,b[N],c[N],ky;
ll num;inline void update(int x,int y){ for(;x<=ky;x+=x&-x) f[x]+=y;}
inline int query(int x){ int an=0; for(;x;x-=x&-x) an+=f[x]; return an;}inline ll calc(){ll an=0;b[0]=0,memset(f,0,sizeof(f));for(int i=1;i<=n;i++) b[i]=b[i-1]+(a[i]<=mid?1:-1),c[i]=b[i];c[ky=n+1]=0,sort(c+1,c+ky+1),ky=unique(c+1,c+ky+1)-c-1;for(int i=0;i<=n;i++) b[i]=lower_bound(c+1,c+ky+1,b[i])-c;update(b[0],1);for(int i=1;i<=n;i++) an+=(ll)query(b[i]-1),update(b[i],1);return an;
}inline void solve(){int L=1,R=1e9;while(L<=R){mid=L+R>>1;if(calc()>=num) ans=mid,R=mid-1;else L=mid+1;}
}int main(){scanf("%d",&n),num=n*(ll)(n+1)>>1,num=(num>>1)+1;for(int i=1;i<=n;i++) scanf("%d",a+i);solve();printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/9536686.html

ARC 101 D - Median of Medians相关推荐

  1. AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为 ...

  2. ARC 101 E - Ribbons on Tree

    题意与数据范围 给定 \(n\) 个点的树,你需要把这些点分成 \(\frac{n}{2}\) 组,每组恰好 \(2\) 个点,且每个点在至多一组中. 称一个分组方案是好的,当且仅当:如果我们把每对点 ...

  3. oracle归档日志是否启用,oracle归档日志满了,导致无法启动 ORA-03113

    今天在进行Oracle相关测试,因为Windows自动更新,自己重启机器了,结果重启完毕之后,我的oracle就无法正常启动了 报ora-03113错误. [csharp] view plain co ...

  4. 分享HTML5 canvas 的总结

    下面我贴出的是对 canvas 的一份总结 便于平时翻阅以及参考 canvas参考 <html><head><title>Canvas tutorial</t ...

  5. 【最详细】BFPRT算法:时间复杂度O(n)求第k小的数字

    去年写了一篇对快排进行改进的算法,可以在时间复杂度 O(n)O(n)O(n)的情况下,找到第kkk小的数字. 那时候,我还不知道这个算法叫BFPRT算法--现在知道了,还知道它又被称为中位数的中位数算 ...

  6. 【arc101】比赛记录

    这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花 ...

  7. 参考文献_参考文献:

    参考文献 算法介绍 (Algorithm introduction) kNN (k nearest neighbors) is one of the simplest ML algorithms, o ...

  8. olap 多维分析_OLAP(在线分析处理)| OLAP多维数据集和操作

    olap 多维分析 In the previous article of OLAP, we have seen various applications of OLAP, Various types ...

  9. canvas 系列学习笔记二《绘制图形》

    canvas 可以获取上下文,2d 部分是CanvasRenderingContext2D,它用于绘制形状,文本,图像和其他对象. 画矩形 canvas提供了三种方法绘制矩形: fillRect(x, ...

最新文章

  1. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...
  2. 参加第十六届智能车竞赛同学提问与回答-6-30
  3. 现在的Android程序员为什么会感到焦虑?焦虑的源头在哪里?该怎么去缓解焦虑呢?——没有无中生有的贩卖焦虑,只有你的挣扎和不甘。
  4. System Center 2012 R2 CM系列之安装Configuration Manager
  5. Apache Hadoop YARN – ResourceManager--转载
  6. boost::mpi::cartesian_topology相关用法的测试程序
  7. c# 通过鼠标点击绘制多边形
  8. Nature methods | Alevin-fry, 一种高效准确的单细胞测序数据预处理工具
  9. 很火的仿soul交友盲盒1.0全开源源码
  10. 浏览器 调用 vue 组件_父子组件的通信
  11. C#語法學習二(NameSpace)
  12. 毕业设计 ASP.Net+EasyUI开发 X X露天矿调度管理信息系统(一)
  13. python基础3-运算符总结_位操作符_优先级问题
  14. Androd UI学习之ImageSwitcher
  15. excel、doc等office文件转pdf方法总结
  16. 常用Windows运行命令大全
  17. 智能工厂信息化系统建设规划
  18. RTL8152网卡灯配置详细说明
  19. PLC控制系统如何抵抗干扰
  20. 关于Google大陆手机号不能验证的问题

热门文章

  1. c++ list 修改_C/C++编程笔记:数据结构系列——顺序表的实现,内含源码
  2. mysql sql len_MySQL的查询计划中ken_len的值计算方法
  3. php://input allow_url_include,php allow_url_include的应用和解释_PHP教程
  4. 数据库外键约束的几种方法及区别
  5. spring4.x aop拦截spring mvc controller
  6. <script>放在head内和body内有什么区别
  7. 模型融合(stackingblending)
  8. SpringBoot中@EventListener注解的使用
  9. java自定义注解实现前后台参数校验
  10. 1091 N-自守数