2019.8.16刷题统计

今天发现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),的确是非常重要。

转载于:https://www.cnblogs.com/wangximing/p/11364863.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值