摘要: **模板** ``` int n = nums.size(); vector left(n, -1); //贡献法记录左辖域,开区间 vector right(n, n); //贡献法记录右辖域,开区间 stack st; //单调栈,降序记录 for(int i=0;i 单调栈+前缀和 ``` c 阅读全文
posted @ 2023-05-19 21:02 失控D大白兔 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 总力量定义为以下两个值的 乘积: 巫师中最弱的能力值 组中所有巫师的个人力量值之和 ###1. 单调栈+前缀和+前缀和 根据单调栈求得每一个值的辖域(当前值为最小值的最长数组范围) 接下来问题就转化成了求在辖域中包含当前值所有子数组的和 求和我们采用前缀和的方式 > 对于abcde,假设c为当前辖域 阅读全文
posted @ 2023-05-19 21:01 失控D大白兔 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 ###1. 单调栈 假如要遍历所有区间,哪怕可以直接获得最小值,时间复杂度也是O(n^2^) 这里我们不逐个找对应区间,而是计算每个值对区间的贡献,可以将时间复杂度降到O(n) 其实也就找遍历时 阅读全文
posted @ 2023-05-19 17:19 失控D大白兔 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 求所有子序列最大值的平方乘以最小值的和 ###1. 数学规律 首先可以发现顺序对结果没有影响,对原数组按升序进行排序,方便从小到大遍历枚举 由于数据量很大,一般只会遍历一次,所以要找数学规律 考虑遍历时的无后效性,前面数组遍历完后,必然会给后面留下一个值 可以通过这个值和当前遍历值计算出以当前值为结 阅读全文
posted @ 2023-05-19 14:51 失控D大白兔 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 一个工作时间段可以连续工作sessiontime个小时 给你任务列表task,task[i]表示第i项任务花费时间 求完成全部工作所需最小时间段(可以按任意顺序完成任务) ####1. 回溯法 回溯时按任务下标推进,边界条件为任务下标等于任务长度 同时要记录回溯几个状态, 分别是当前任务下标、已用时 阅读全文
posted @ 2023-05-19 13:11 失控D大白兔 阅读(83) 评论(0) 推荐(0) 编辑
摘要: ###一. [区间合并、插入、重叠数](https://www.cnblogs.com/929code/p/16369464.html) ###二. [区间内满足条件的点对、区间和、偏序关系数(树状数组和前缀和)](https://www.cnblogs.com/929code/p/17366099 阅读全文
posted @ 2023-05-19 00:37 失控D大白兔 阅读(19) 评论(0) 推荐(0) 编辑