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