有一摞书,从上到下依次编号为 a_1,a_2,a_3...,现在 Vasya 想把它们分 n 次挪到别的地方,每次他会告诉你他想挪的书的编号,如果这本书还没有被挪动,他将会把这本书以上的书(包括这本书)一块搬走。对于每次挪动,回答他搬了多少本书(没搬输出 0)。
n\le 2\times 10^5
Solution
开一个桶记录每一本书的位置,记录当前搬到那个位置了,每搬一次就更新一下,减一下即可。
C. Vasya and Robot
Problem
有一个机器人,初始在 (0,0) 点,给你一个长度为 n 的操作序列,每次让机器人向上、下、左、右中的一个方向走一步,你需要修改连续的一段操作序列(这一段中的操作不必全部都修改),使它最终走到 (x,y) 点,问修改的操作序列的最短长度。(不是很严谨,序列长度的详细定义见原题面)
n\le 2\times 10^5
Solution
如果修改一个长度为 len 的序列可以使它走到终点,那么一定存在一种长度为 len+1 的方案也能走到终点(大不了就加一个空修改),于是我们发现这是可以二分的。二分最终修改的长度 len,对于一个长度,我们需要 O(n) 判断是否可行,怎么判断呢?对于每一段长度为 len 的修改,判断不考虑这段修改后机器人会走到哪个位置,再从这个位置开始,判断随便走 len 步能否走到终点(反正允许修改这一段,那想怎么改就怎么改)。