【艰苦时期 PJ1】题解
【艰苦时期 】题解
.在劫难逃
-
把所有情况枚举出来,取前大即可。
-
考虑,我们先对每种宝箱做背包。
表示到第个宝箱得到价值为的方案数,则有
于是只要转移即可,为每个宝箱最大值的和。
统计答案就很简单了。 难度:
劫富济贫
-
枚举全排列即可,计算最大收益即可。
-
综合算法
由于没有相同的,可以偷取每个金库的钱, 即可
-
考虑贪心,对于那种先以为第一关键字排序以 为关键字排序在统计肯定是错的。
于是我们要反悔:如果已经积累要偷金库的数量大于 却价值很高。我们要舍去价值小的来替换这个。如果小于直接加入计划即可。
这些都可以用小根堆来维护的。时间复杂度
难度:
占卜豪杰
-
对于每个暴力在中扫一遍记录上次扫到的位置,找到第一个大于且的位置,然后不停地更新即可。时间复杂度
-
综合算法
因为是个排列满足递增且唯一,这样就可以很快的判断了。
-
先用一个记录所有在中出现的位置,每次查询只要二分容器中所有与相等值的最前位置,也与算法一样记录一个不停的更新即可。
虽然还有更高级的离线做法,这里就不说了。
难度:
万劫不复
-
每次修改都暴力做最长上升子序列即可,时间复杂度
-
综合算法
对于测试点只要判断原序列的或者是否为的必要元素,如果是只要
输出即可,否则还是输出 。(为原序列的)那如何判断是否为必要元素呢? 先对原序列每个 做一遍以他为结束的记为
,以他作为起始的记为 。易得原序列的 就为 。如果
满足就可以认为是原的必经元素。 -
显然每次修改暴力做是不可行的复杂度至少为。于是我们要思考每次修改会对答案形成怎样的影响。
先对原序列每个点做一遍以他为结束的记为,以他作为起始的记为。易得原序列的就为。
每次对于修改一个值分几种情况来考虑,我们记修改过后的为,同理。
对于的情况如果那就更新答案
对于的情况相对复杂一点。我们要先判断此次修改的点是否为原序列的必经之点,判断的方法很简单如果,并且这样的情况有且只有一种。
剩余的就是不变的情况了。于是我们这道题目就做完了。求可以使用树状数组来实现正着倒着即可并且要离散化一下就可以了。用离线来实现。
难度: