今天发现1144题数据有错,总是输出超限,而且没有任何人通过这道题,希望老师重新看看数据。
第一题:1145
这道题就是RMQ模板加上循环n-k+1次的查询操作。
AC代码:
第二题:1146
这道题有一定难度(我稍微看了一下上课时写的代码)。
首先,在这道题目中,可以知道这样一点:
再明确一个公式:x个数中任选2个组合的公式为
也可以这样算x+1个数中任选2个组合:
还需要注意以下一点:
这样,程序可以用如下思路:
①从0~k-1枚举颜色
②ans+=第二个公式(x=颜色为①的点的数量)
③从1~n枚举颜色为①的点
if(枚举到的不是第一个颜色为①的点)
if(!ok(上一个为当前颜色的点,当前点))//通过上面推理,说明ok(x,x+1~当前点)(x=上一次sum清空的点+1~当前点-1)都不合法,相当于不合法的点数=第二个公式(x=累加后的sum)
sum累加
else
ans-=第二个公式(x=sum),sum清空
有了思路以后,实现就很简单了。
最后需要注意以下一点:开long long!
AC代码:
第三题:1147
这道题就是用两个ST表来记录最大/最小值,然后相减即可。
AC代码:
第四题:1148
这道题更简单,完全就是ST表的模板。
AC代码:
今天刷的全部题目都是ST表的题目,明天开始图论II。
倍增ST表不仅不难、很好写,而且能够使O(nm)这样高的时间复杂度降低到O(nlogn),的确是非常重要。