判定性统计问题的启发

今天看见这样一道题目:

一个N*N的矩阵(N<2000),满足下列两个操作:

1.添加一个子矩形;2.查询某个点被多少个矩形覆盖,并销毁这些矩形。

 

如果没有后面这句“销毁”的话,这就是个水题了,直接用二维树状数组维护点事件即可,但是需要销毁,怎么办?

 

尽然不能直观的查询某个点会被多少个矩形覆盖,那么不防换一个角度:查询这个矩形是被哪个点销毁的,首先我们可以知道,每个矩形只会被一个点销毁,那么是满足什么条件的点才可以满足呢?我们相当于是找一个时间在我矩形创建之后,属于我的区域范围,操作时间最靠前的点!

 

到这里就豁然开朗了,我们把操作倒过来做一便,查询区间最小值!

 

一个浅显易懂的方法,给我的启示是:当前的操作不可能直接统计的话,我们应该换一个方向,换一个角度,

比如:离线!这是最常用的方法,

还有就是转换方向,统计与被统计~ 

在某些可以拆分或者相消的统计,考虑分段统计。

 

这让我想到了之前的一道题:完美选手数!

对于有些只判断是与否的问题,如果我们只是单纯的维护个是与否的话会不会太浪费了?有时可以通过转化把问题转化为区间最值以记录更多信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值