当前位置: 代码迷 >> 综合 >> 『二分答案』Median Pyramid Hard
  详细解决方案

『二分答案』Median Pyramid Hard

热度:30   发布时间:2023-12-17 11:09:31.0

题目描述

在这里插入图片描述
在这里插入图片描述

题解

我们可以二分一个中位数,判断中位数是否大于等于这个数。

那么我们求得就是中位数大于等于这个数的最大值。

我们可以将大于等于mid的数字标记为1,其余的标记为0.

则最后的check是否合法都取决于最顶端的数字如何了。

我们会发现如果最中间有相邻两个格子是一样的,说明它们一定可以延续到最顶端。

否则就好考虑这种情况:

  • 有相邻两个一样的
    在这里插入图片描述
    然后你可以发现边上如果有两个相邻的,会逐渐跳到中间。因此我们只需要从中间往边上扫,扫到的第一个存在相邻两个相同的就直接返回即可。
  • 不存在相邻两个一样的。直接返回最边上的数字即可。

就这样,十分巧妙的将中位数问题转化为二分答案的判定问题。

#include <bits/stdc++.h>using namespace std;
const int N = 300000;int n;
int a[N], b[N];bool 
  相关解决方案