对于代码和题目详见百度网盘,这只讲思路。
T1,显然是一个dfs暴力就可以过,但是我的YES小写了
沉默两秒..........
T2,这一道题我要好好讲讲(下面是我写的题解)
下面有四种情况
看懂了吗(看懂了!!),还是挺好理解的(可是考试时候还是推不出来啊)
T3,这一题我一开始想的是分块(因为下午要讲的是分块,所以我就没多想),后来正解竟然是倍增(说实话,我的倍增除了写了lca外,其他的一概不知),我们用f[i,j]表示从位置 i 开始,选择 2^j 条线段, Ri 最大的线段 Ri 最小是多少。显然所有
的 f[i,j]可以在 O(nlogn)的时间内计算出来
询问时我们从 x 开始,从大到小枚举 k,如果选择 2^k 条线段后没有超出区间的范围,那么答案加上 2^k,然后继续统计 f[x,k]+1~y 这段区间的答案。这样单次询问复杂度是 O(logn)的,询问的总复杂度是 O(Qlogn)