博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多次查询一段区间内有多少个子区间满足其中一个端点为区间最大值。
阅读量:5155 次
发布时间:2019-06-13

本文共 477 字,大约阅读时间需要 1 分钟。

考虑维护出每一个点左边第一个比它大的位置,右边同理,这样有一个合法区间。

然后对询问离线,由于要求只包含区间内的贡献,扫描线+线段树解决。

T1

考虑一下笛卡尔树,然后分析出答案等于这个区间形成的笛卡尔树的所有节点的子树和。
再做一步转化就等价于有多少个节点存在祖先与后代的关系。
这个又等价于最开始的那个问题。

T2

题意转化出来是:
一个端点为最大值,另一个端点是次大值贡献为p1。
一个端点为最大值,另一个端点不是次大值贡献为p2。
考虑先把所有有一个端点为最大值得区间全部记贡献为p2。
然后由于条件1和条件2的第二部分是互补的,只需要修改一部分贡献为p1即可。(如果不是互补的,你只改一部分另一部分还会包含不合法的。)
如果考虑去找以x为最大值,哪些位置可以为次大值并不容易。
考虑反向操作,找以x为次大值,哪些位置可以为最大值。
这个显然就只有两个位置。(也就是之前预处理出来的左/右第一个比它大的位置)
同样的方法用线段树维护即可。

转载于:https://www.cnblogs.com/Creed-qwq/p/10422928.html

你可能感兴趣的文章
Linux Kernel API
查看>>
oracle学习
查看>>
【C语言项目】贪吃蛇游戏(下)
查看>>
DevExpress第三方控件汉化的全部代码和使用方法
查看>>
二分查找算法(C#实现)
查看>>
vue项目中开启Eslint碰到的一些问题及其规范
查看>>
ES terms多值搜索及范围过滤深入剖析-搜索系统线上实战
查看>>
大咖专栏 | DevOps组织如何有效地实施MSA
查看>>
工厂模式
查看>>
忍不住了, 和大家聊聊怎么写简历吧, 关于简历的深度思考
查看>>
高并发编程
查看>>
(前端)html与css css 19、tab栏
查看>>
一起来学习.net core程序使用中介者模式:MediatR插件
查看>>
debian9 设置
查看>>
5句话搞定ES5作用域
查看>>
Build tool
查看>>
php 小坑记录
查看>>
2018.7.28 二叉树的遍历规则(前序遍历、后序遍历、中序遍历)
查看>>
通过 poi 导入 Excel代码
查看>>
《CSS基础教程》 读书笔记三
查看>>