Codeforces Beta Round #75 Igloo Skyscraper



很不错的一道线段树的题目



在每个节点里面加个线性表,这是关键的操作!

线性表里面是这个节点的范围内,将它按照a数组从小到大排序,接着剔除掉a[i] >= a[j] 并且b[i] >= b[j]这种j

另外还要用到(a[x] - a[y])*(b[z]-b[y])<=(a[y] - a[z])*(b[y]-b[x),把这种y全部删除掉,保证线性表的单调性

接着查找的时候就可以用到二分,即可得出答案


至于时间复杂度

线段树每一层的线性表里面总共n个点,总共lgn层,每一层都有排序什么的,建树的时间复杂度是O(n lg^2 n)

另外查询有q次,每次递归找区间是lgn次,二分是lgn次,查询的时间是O(q lg ^2 n)

总的时间复杂度是O(n lg^2 n + q lg ^2 n)


还有一点,可以不使用二分,将时间点排序,接着的话,就是最多nlgn次





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值