摘要:
这个题有点恶心啊,总觉得以前做过,可就是想不出来。最后在发现是meng神出的一次模拟赛题= =当时我还P都不会呢... 这个题有两个关键点,一个是选取的子序列内不能有重复,二是选取的子序列要是一个排列(当然这包含了一)。首先如果确定了不会重复,那么只要子序列内的数的和等于(len+1)*len/2就行了,那么怎么确定不重复呢? 我们可以O(N)时间求出来每个数两边第一个和它相同的数的位置(L,R),这样我们可以不断地更新合法的序列的范围。 具体方案:我们先确定每一个1的位置(因为每个区间首先必须有1),按照这个来划分区间。我们先从左到右扫每个区间,相当于枚举了右端点k(我们要包含那个... 阅读全文