#P16892. [EJOI 2026]Increasing Split
[EJOI 2026]Increasing Split
- 比赛:EJOI 2026 Day 1
- 时间限制:1.5 秒
- 内存限制:1024 MiB
- 题目类型:函数提交题
题目描述
Boris 和 Ihor 找到了一个由 个正整数组成的序列
,
并希望把这些数分给两个人。
你事先可以看到完整序列。随后按从左到右的顺序依次处理 。处理每个元素时,必须把它恰好分给 Boris 或 Ihor 中的一人。
两人都要求:自己收到的元素按照收到顺序必须构成一个严格递增序列。
也就是说,每次分给某个人的新元素,都必须严格大于此前最后一次分给他的元素。一个人收到的第一个元素可以是任意值,也允许某个人一个元素都收不到。
对于每个整数 ,你需要独立判断:
是否存在一种划分,使 Boris 恰好收到 个元素,并且 Boris 与 Ihor 各自收到的序列都严格递增?
各个 之间相互独立,可以使用完全不同的划分方案。
例如 :
- 当 时,可以把 分给 Boris,把 分给 Ihor,因此可行;
- 当 时,所有元素都必须给 Ihor,而序列从 开始,不严格递增,因此不可行。
该例中仅 和 可行。
实现要求
实现:
std::vector<bool> increasing_split(std::vector<int> a);
a:长度为 的输入序列。
返回一个长度恰好为 的布尔数组。
第 个元素为:
true:存在合法划分,使 Boris 恰好收到 个元素;false:不存在。
每个测试中该函数恰好调用一次。
数据范围
- ;
- 。
样例 1
Sample grader 输入
5
3 1 4 5 5
Sample grader 输出
001100
说明
- :不可行;
- :不可行;
- :例如把 给 Boris,把 给 Ihor,可行;
- :可行;
- :不可行。
样例 2
Sample grader 输入
4
1 2 3 4
Sample grader 输出
11111
序列本身严格递增,因此无论怎样把元素分给两个人,两人的子序列都仍严格递增。于是 全部可行。
子任务
| 子任务 | 分值 | 额外限制 | |
|---|---|---|---|
| 0 | - | 样例 | |
| 1 | 10 | 无 | |
| 2 | 5 | 对所有 , | |
| 3 | |||
| 4 | 16 | 是 到 的排列;对任意满足 的 ,前缀 恰好是 到 的排列 | |
| 5 | 21 | 是 到 的排列;对任意满足 的 ,前缀 恰好是 到 的排列 | |
| 6 | 17 | 与子任务 5 相同 | |
| 7 | 16 | 无 | |
| 8 | 10 | ||
Sample grader
输入:
- 第一行一个整数 ;
- 第二行 个整数 。
若返回数组长度不是 ,Sample grader 会判错。
否则输出一行长度为 的二进制串:第 位为 1 表示 可行,否则为 0。