Atcoder abc236
https://atcoder.jp/contests/abc236/tasks
E - Average and Median
给你一个数列
从中选一些数,保证任意相邻的两个至少一个被选
求 平均数的最大值
求 中位数的最大值, 这里偶数个的时候, 取第 n/2 个 而不是中间两个的平均数
范围
n 1e5
ai [1,1e9]
我的思路
想dp吧, 但是如果是dp[i][0/1]
表示第i个是否选的最大平均值
那么问题是, 前面更小的平均值可能让结果更大
因为 (v0c0+a[i])/(c0+1) < (v1c1+a[i])/(c1+1), 并不意味着 v0和v1的大小关系
但如果把数量带上, 啊不就n^2空间
然后思路二, 先任意选一些合法, 然后剩下的没选的中, 从大到小,只要比当前平均值大, 则选择, 否则不选
这样最优 = 最优
问题是 如何枚举所有初步合法, 就算枚举了, 这样搞 至少还有个n倍
再就是,直接从大到小选,选到合法为止, 但是看起来样例就是反例
再就是 考虑二分答案, 答案是否小于 val, 如果小于, 则所有大于它的都必选, 因为如果不选,而答案小于val,则选了可以更大
这样对于剩下的来说, 依然和数量和和有关比如 200 100 1 100 200,
不会了