luogu#P11761. [IAMOI R1] 明码标价
[IAMOI R1] 明码标价
题目背景
小 C 拉小 L 去买东西。
题目描述
商场里有 个商品,第 个商品的价格为 。由于小 C 具有选择困难症,所以小 L 想通过以下方式挑选购买一个商品:
小 L 既不想要选择最便宜的商品(质量差),也不想要选择最贵的商品(性价比低),于是,他定义 个商品价格的中位数为按照价格从小排序后最中间的商品价格。具体的说,排序后第 个商品的价格就是这 个商品价格的中位数。
同时,小 L 准备把这 个商品按照用处分为连续的 段,并在每段中取出价格为中位数的商品。接下来,他再次取出这些商品之中价格为中位数的商品,选出这个唯一的商品购买。
然而小 C 似乎并不同意这个方案,原因是小 C 的划分与小 L 的划分并不相同。于是,他们决定各退一步,采取最公平的方式选择商品。具体的,他们找出按照任意划分方案而得出的商品价格(可能存在一个商品被找出多次,也要计算多次),再次取出价格为中位数的商品,选出这个唯一的商品购买。
然而划分的方案可能有很多种,小 L 和小 C 被绕晕了。所以,他们想请你帮忙,他们最后选出的商品价格是多少?
形式化题意
定义 表示在可重集合中 的中位数。形式化地来说, 的中位数为将 到 从小到大排序后, 的值。
现有一个长度为 的数列 。定义了 $f(l,r)=\operatorname{mid}(\{a_l,a_{l+1},\cdots,a_r\})$。
定义划分和划分的权值:
-
一个划分被定义为一个长度为任意一个在 的整数 的序列 ,满足 。
-
两个划分不同当且仅当两个划分的 不相同或者存在一个位置使得两个划分的 不相同。
-
当 时,划分的权值是 $\operatorname{mid}(\{f(1,l_1),f(l_1+1,l_2),\cdots,f(l_k+1,n)\})$。
-
否则,划分的权值是 。
求所有互不相同的划分权值的可重集合的 。
输入格式
第一行,共一个整数 。
第二行,共 个整数,表示 。
输出格式
共一个整数,表示最后选出的商品价格。
3
1 2 3
1
提示
样例解释
共有 种划分方案,分别为 $\{\{1\},\{2\},\{3\}\},\{\{1,2\},\{3\}\},\{\{1\},\{2,3\}\},\{\{1,2,3\}\}$,其中:
$\operatorname{mid}(\{1\})=1,\operatorname{mid}(\{2\})=2,\operatorname{mid}(\{3\})=3,\operatorname{mid}(\{1,2\})=1,\operatorname{mid}(\{2,3\})=2,\operatorname{mid}(\{1,2,3\})=2$;
这 种划分的权值分别为 $\operatorname{mid}(\{1,2,3\})=2,\operatorname{mid}(\{1,3\})=1,\operatorname{mid}(\{1,2\})=1,\operatorname{mid}(\{2\})=2$;
最终答案即为 。
数据范围
本题采用捆绑测试。
Subtask | 特殊性质 | 分值 | |
---|---|---|---|
无 | |||
A | |||
无 | |||
A | |||
无 |
特殊性质 A:保证 为一个 的排列。
对于所有数据,保证 ,。
注:在 C++ 语言中,你可以使用类型 __int128
来存储范围在 的整数。