BZOJ1594【USACO2008 Jan】猜数游戏 <二分答案+线段树>
Problem
【Usaco2008 Jan】猜数游戏
Description
为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。
游戏开始前,一头指定的奶牛会在牛棚后面摆堆干草,每堆有若干捆,并且没有哪两堆中的草一样多。
所有草堆排成一条直线,从左到右依次按编号,每堆中草的捆数在之间。
然后,游戏开始。
另一头参与游戏的奶牛会问那头摆干草的奶牛个问题,问题的格式如下:
编号为的草堆中,最小的那堆里有多少捆草?
对于每个问题,摆干草的奶牛回答一个数字,但或许是不想让提问的奶牛那么容易地得到答案,又或许是她自己可能记错每堆中干草的捆数,总之,她的回答不保证是正确的。
请你帮助提问的奶牛判断一下,摆干草的奶牛的回答是否有自相矛盾之处。
Input
- 第行: 个用空格隔开的整数:和
- 第行: 每行为个用空格隔开的整数,描述了一个问题以及它对应的回答
Output
如果摆干草的奶牛有可能完全正确地回答了这些问题,输出;否则输出个中的数,表示这个问题的答案与它之前的那些回答有冲突之处。
注意:如果有冲突出现输出一个数,使得前个命题不冲突。
Sample Input
1 | 20 4 |
Sample Output
1 | 3 |
Source
Gold
标签:二分答案
线段树
Solution
二分答案,设二分到,需要判断第个条件是否不存在矛盾(最后答案加一)。
将第个条件按从大到小排序,每次找出一段相同的条件,求其区间的并。可知值为的数一定在这个并中。因此若这个并不存在,则一定矛盾。另一种矛盾的情况是存在一个包含这个并的区间,其答案大于。对于这种情况,我们在每次操作完一组相同的条件后,对这些区间的交做标记。若一组相同的条件的区间并完全被打上标记,意味着其被前面的更大的区间覆盖,即存在一个包含该并的区间,其答案大于。这个标记可以在线段树上维护。
综上,check的复杂度是,总时间复杂度为。
Code
1 |
|