C++知识点总结(55):时间优化

一、调试方法

1. 输出调试

cout 是一个强大的调试工具,可以帮助我们查看程序的状态和变量的值。在调试过程中,可以使用 cout 来输出变量的值,以验证程序的正确性。(虽然是第一节课学的

2. 构造样例

构造的样例包括下面的两种:

  • 边界信息
  • 特殊样例

这两种应该说是蹭分 debug 的一个工具,尤其注意分辨 continuebreakreturn 0;。特殊样例一定要考虑极端情况。好吧,实在不行就打表

二、时间优化

1. 前缀和

1.1 概念

仅有两个元素的容斥关系如下:
∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A \cup B| = |A| + |B| - |A \cap B| AB=A+BAB
根据这一公式,我们可以求出二维前缀和的公式:
s i , j = s i − 1 , j + s i , j − 1 − s i − 1 , j − 1 + a i , j s_{i,j}=s_{i-1,j}+s_{i,j-1}-s_{i-1,j-1}+a_{i,j} si,j=si1,j+si,j1si1,j1+ai,j
从而逆推出二维区间和公式:
s x 1 , y 1 ∼ x 2 , y 2 = s x 2 , y 2 − s x 1 − 1 , y 2 − s x 2 , y 1 − 1 + s x 1 − 1 , y 1 − 1 s_{x_1,y_1\sim x_2,y_2}=s_{x_2,y_2}-s_{x_1-1,y_2}-s_{x_2,y_1-1}+s_{x_1-1,y_1-1} sx1,y1x2,y2=sx2,y2sx11,y2sx2,y

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值