二分中位数模板
二分中位数#
在一个序列中,小于等于 的元素个数如果大于等于 ,那么中位数一定小于等于 。
Check 的判出条件为小于等于 的元素个数。
const int N = 1e5 + 32;
ll n;
ll a[N];
bool Check(ll x)
{
ll cnt = 0, en = (n + 1) / 2;
fr(i, 1, n)
{
if (a[i] <= x) ++cnt;
if (cnt >= en) return 1;
}
return 0;
}
int main()
{
n = re;
fr(i, 1, n) a[i] = re;
ll l = 0, r = 1e9;
while (l < r)
{
ll mid = (l + r) >> 1;
if (Check(mid)) r = mid;
else l = mid + 1;
}
W(r, '\n');
return 0;
}
/*
输入
4
1 2 3 4
输出:2
输入
5
1 2 3 4 5
输出:3
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下