DTOJ 2899. Solar lamps(lamp)

题意

lantian有一个美丽的大花园,因为他喜欢在黄昏后欣赏花园的美丽,他在花园中安装了许多盏灯。

这些灯是有方向的,它们只会朝一个确定的夹角内发光。而且,lantian把它们安放的很整齐,所以它们都朝向同一个方向。

这些灯都是太阳能灯,它们使用的是太阳能而不是电能。第 $ i $ 盏灯会发光当且仅当至少 $ k_i $ 盏灯照到了它或者它通了电。

现在,lantian将按 $ 1 $ 到 $ n $ 的顺序给每盏灯通电,即在第 $ i $ 个时刻给第 $ i $ 盏灯通电。最后,lantian想知道每盏灯从哪一个时刻开始发光,请写一个程序回答这个问题。

题解

首先那个夹角的范围直接看不好做,考虑转化为直角坐标系。即以所给的两条射线的方向向量为基底,每个点用它们表示为直角坐标系的坐标。注意到两条射线共线时会有问题,把其中一条偏转一下,变为一个极小的夹角即可。

于是问题转化为直角坐标系上的 n n n个点,第 i i i个点在时刻i被点亮,如果它的左下角有不少于 k i k_i ki个点被点亮时它也被点亮,求每个点第一次被点亮的时间。

由于这个过程是动态的,即一个点被点亮时会影响它右上的点,被点亮的又会继续去影响,且每个点的 k i k_i ki不同,直接做不好找到哪些点有影响,不好维护。而我们关心的又是时间,如果我们能知道在一个时间前被点亮的点有影响,那么直接考虑编号小于这个时间的点的影响,并在该过程中把这个时间内被点亮的点的影响加入,就可以把所有点被点亮的时间分为前后两部分。

于是考虑整体二分,记当前 [ a , b ] [a,b] [a,b]内的点在时间 [ l , r ] [l,r] [l,r]内被点亮,按照 x x x为第一关键字, y y y为第二关键字排序,用以 y y y为关键字的树状数组维护找出每个点右下角的点数,即可找出 m i d mid mid之前被点亮的点,递归下去做即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值