TYM 有 nn 本作业,编号为 1,\dots,n1,…,n. 由于 \mathrm{TYM}TYM 很喜欢偷懒,而且不喜欢消耗脑细胞,所以他选择跳着完成这 nn 本作业.此外,如果将做作业的顺序转换为 1,\dots,n1,…,n 的一个排列,并以序列 ss 表示,有以下规定: 最终 \forall i \in [1,n-1],a_{s_i} \leq a_{s_{i+1}}∀i∈[1,n−1],asi≤asi+1. 每次做作业时,对于最后一本做完的作业 ii 和下一本准备做的作业
只要注意一下细节就毫无难点了,简简单单状态压缩即可. Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 20; const long long mod = 4921057 ; int a[maxn], b[maxn], pos[maxn], sumv[maxn]; long long dp[1 << maxn][maxn]; inline int lowbit
P3586 [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进行s次操作.每次询问独立,即每次询问不会对序列进行修改. 离散化按照权值建立树状数组. 那么对于大于s的值,可以直接减去s,这一部分的贡献为\(c*(query_{geshu}(tot)-query_{geshu}(s-1))\). 剩下的数,我们只知道他们小于s,但是不知道确切的值所以