The 2024 ICPC Asia East Continent Online Contest (I) G
Link: The Median of the Median of the Median
考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可。
我们钦定了一个中位数 \(x\),对于 \(\{a\}\) 数组,若 \(a_i \ge x\),则令 \(a_i = 1\),否则 \(a_i = 0\),这样有一个好处,我们只关心 \(1\) 和 \(0\) 的数量,就可以知道中位数是否比 \(x\) 大。
如果 \(\{a\}\) 中 \(1\) 的个数多于 \(0\) 的个数,说明中位数大于等于 \(x\),否则中位数小于 \(x\)。
考虑对所有的 \(\{b_{i,j}\}_{l\le{i}\le{j}\le{r}}\) 求值,不妨枚举左端点 \(l\),求出一个以 \(l\) 为左端点的 \(\{b_{i,j}\}_{l\le{i}\le{j}\le{r}}\) 的中位数,我们通过前缀和可以求出有多少个数是大于 \(x\) 的。
设 \(cnt[i][j]\) 表示以 \(i\) 为左端点,所有 \(i \le k \le j\) 的 \(b_{i, k}\) 大于等于 \(x\) 的个数,\(pre[0/1]\) 表示 \(a[i \sim j]\) 中 \(0/1\) 的数量,容易发现:
\]
考虑如何计算 \(\{c_{l, r}\}_{1\le{l}\le{r}\le{n}}\),我们枚举 \(r\),对所有 \(1 \le l \le r\) 求和,因为我们计算的 \(cnt[i][j]\) 是以左端点固定的,因此计算一对 \((l, r)\) 时,对 \(l\) 求 \(cnt[i][r]\) 的后缀和即可,不过因为 \(cnt[i][j]\) 表示的是一个段,因此,\(0\) 的个数变化 \(j - i + 1 - cnt[i][j]\),\(1\) 的个数变化 \(cnt[i][j]\),对答案贡献 \(1\) 当且仅当每个段 \(1\) 的个数大于 \(0\) 的个数。
当 \(1\) 的个数大于 \(0\) 时,说明中位数大于等于 \(x\),二分答案即可。
时间复杂度 \(O(n^2\log{|a|})\)。
#include<bits/stdc++.h>
using namespace std;
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i ++ ) cin >> a[i];
auto check = [&](int x) -> int {
vector<int> b(n + 1);
vector<vector<int>> cnt(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i ++ ) b[i] = (a[i] >= x);
for (int i = 1; i <= n; i ++ ) {
vector<int> pre(2);
for (int j = i; j <= n; j ++ ) {
pre[b[j]] ++ ;
cnt[i][j] = cnt[i][j - 1] + (pre[1] > pre[0]);
}
}
vector<int> sum(2);
for (int i = 1; i <= n; i ++ ) {
vector<int> pre(2);
for (int j = i; j; j -- ) {
pre[1] += cnt[j][i];
pre[0] += i - j + 1 - cnt[j][i];
sum[pre[1] > pre[0]] ++ ;
}
}
return sum[1] > sum[0];
};
int l = 1, r = 1e9;
while (l < r) {
int mid = (l + r + 1) >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
cout << r << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
solve();
return 0;
}
The 2024 ICPC Asia East Continent Online Contest (I) G的更多相关文章
- 训练20191009 2018-2019 ACM-ICPC, Asia East Continent Finals
2018-2019 ACM-ICPC, Asia East Continent Finals 总体情况 本次训练共3小时20分钟,通过题数4. 解题报告 D. Deja vu of - Go Play ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals I. Misunderstood … Missing(dp)
题目链接: http://codeforces.com/gym/102056/problem/I 题意: 人物有l两个属性分别是$A,D$ 每个回合人物$A\pm D$ 每个回合有三个选择分别是: 1 ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals部分题解
C:显然每p2个数会有一个0循环,其中22 32 52 72的循环会在200个数中出现,找到p2循环的位置就可以知道首位在模p2意义下是多少,并且循环位置几乎是唯一的(对72不满足但可能的位置也很少) ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals Solution
D. Deja vu of … Go Players 签. #include <bits/stdc++.h> using namespace std; int t, n, m; int m ...
- 2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final 2017) Solution
A:Chat Group 题意:给出一个n, k 计算C(n, k) -> C(n,n) 的和 思路:k只有1e5 反过来想,用总的(2^ n) 减去 C(n, 0) -> C(n, k ...
- The 2017 ACM-ICPC Asia East Continent League Final记录
首先感谢tyz学弟的麻麻-给我们弄到了名额- 然后就开始了ACM ECLFinal的玩耍,A*仙人掌可是立了flag要好好打的- 试机赛好像就全是GCJ kickstart的原题,然后AK了但是由于一 ...
- Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)
题目链接 ECL-Final 2017 Problem D 题意 给定$2*10^{5}$组询问,每个询问求$l$到$r$之间有多少个符合条件的数 如果一个数小于等于$10^{15}$, 并且能被 ...
- 2019-2020 ICPC Asia Hong Kong Regional Contest
题解: https://files.cnblogs.com/files/clrs97/19HKEditorial-V1.zip Code:(Part) A. Axis of Symmetry #inc ...
- 2018-2019 ACM-ICPC, Asia East Continent Final L Eventual … Journey
#include<iostream> using namespace std; ; int cnt[MAX]; int ans[MAX]; int a[MAX]; int main() { ...
- 训练20191005 2017-2018 ACM-ICPC Asia East Continent League Final
A 签到 M 签到 K 读懂后签到 L 博弈论 [引理]出现SXXS结构时后手必胜. 很容易发现n为奇数时后手不可能胜利,n为偶数时先手不可能胜利.n≤6时一定平局,n≥7时先手有可能胜利,n≥16时 ...
随机推荐
- java_GUI
package GUi;import java.awt.*;import static java.awt.Color.red;public class GuI { public static void ...
- Vue elementui 进度条随机颜色
项目要求显示进度条,而且进度条的颜色不能重复,所以就有了随机进度条的想法. 实现的最终效果: <el-table-column header-align="center" a ...
- Coursera, Big Data 5, Graph Analytics for Big Data, Week 3
Graph Analytics 有哪些类型 node type (labels) node schema: attributes 组成了schema. 同样的, Edge也有 Edge Type 和E ...
- 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)
详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...
- numpy argsort排序如何让其稳定排序
numpy.argsort(a, axis=-1, kind=None, order=None) Parameters: aarray_like Array to sort. axis int or ...
- PyCharm 的一些基本设置&&常用插件&&快捷键
PyCharm一些基本设置 1.主题色彩 2.添加设置:Ctrl+鼠标滚轮上下调节字体大小 3. 中文语言包 4.翻译插件 5.快捷键
- 系统编程-操作系统概论PART2
<1> 操作系统提供的服务 <2> 现代操作系统的特征 2.1 微内核(英文中常译作µ-kernel或者micro kernel) 这是一种能够提供必要服务的操作系统内核: ...
- Vue3——Vite + element-plus +Vue3 项目搭建、"@"别名设置
1. 环境准备 node 官网 npm 切换国内 npm 源镜像 npm config set registry https://registry.npmmirror.com 查看当前的镜像源 npm ...
- NOIP2023 游记 初见曙光
NOIP2023 游记 Day 0 明天就考 NOIP 了,今天还是得扎实的复习一下. 安排一下我的复习计划: 上午&&下午 复习线段树 复习权值线段树 学习带权并查集 复习 lca ...
- QQ或者微信可以放昵称的超好看的符号
☪︎⋆ ✯ ⛈ •ᴗ• •ᴥ• ◔.̮◔ ᕱ ᕱ ⸝⸝· ᴥ ·⸝⸝ ʕ·͡ˑ·ཻʔ ʕ•̫͡•ོʔ ˃̣̣̥᷄⌓˂̣̣̥᷅ °꒰'ꀾ'꒱° ⋆ᶿ̵᷄ ˒̼ ᶿ̵᷅⋆ ˙ϖ˙ ⚝ ︎ .˗ˏˋ♡ˎˊ˗ ...