QOJ8147
首先可以手算出这个序列满足:
- \(a_1=1\);
- \(a_{i+1}=-a_i\vee a_{i+1}=a_i+2\).
但是还是不好数啊。接下来这一步纯数学,构造:\(b_i=\frac{|a_i|+1}{2}\),显然还是整数序列。
发现限制变成了:
- \(b_1=1\);
- \(b_{i+1}=b_i+1\vee b_{i+1}=b_i-1\).
值域限制是 \([0,\frac{m+1}{2}]\),这个能做吗?
考虑把 +1 看作向右一步,-1 看作向上一步,那么这就是个折线问题,要求 \(x-m+1\le y\le x+1\),最终走到 \((x,m-x+1)\)。
可以看作不经过两条折线的格路计数,这个东西大概做法就是在一条折线的基础上做容斥,每次换一个对称直到做完。
AGC045B
相当于最小化前缀和的极差,不妨假设 ? 都是 0,然后调整一些为 1。
我们可以枚举一下最大值啊,然后就可以贪心上调最小值,显然贪心的方法也很简单,就是从前往后只要能上提就提。
这是个平方做法,考虑优化,大概是会存在一些数据结构方法的。
不过可以进一步发掘性质:最大值至少是原有的,而我们第二次上调最大值时,那么最小值也会有相同的涨幅,否则说明第一次没涨够。
因此最大值涨一次就够了。
QOJ10404
匹配的条件就是 \(l_i+l_j\le s\le r_i+r_j\),考虑贪心匹配。
如果我们按照 \(l\) 递减排序区间,然后考虑当前区间 \(i\) 和 \(l_j\le s-l_i\),肯定后面的 \(i\) 决策更包容(在 \(l\) 的限制上),因此当前的 \(i\) 若能和 \(j\) 匹配的话为了某个后面的决策而放弃肯定是不优的,所以我们贪心地在此处尝试做匹配,找出最小的能匹配的 \(r_j\)。
执行上述操作直到 \(i>j\),那么后面的决策都被考虑过了,而当前的决策都能满足 \(l\) 的限制,再在他们之中匹配即可。
CF2085F2
考虑枚举我们选出数列的中位数在 \(p\),那么 \(p\) 处的答案就是 \(\sum{p-s_i}+\sum{t_i-s}\),其中 \(s_i,t_i\) 就是某个颜色到 \(s\) 的最近距离。
这个平方做法能否优化呢?可以的,我们需要给 \(s_i,t_i\) 做整体加法,修改常数个位置的 \(s_i,t_i\),以及查询两侧的前 \(k\) 大和。
使用对顶 std::multiset 即可。
CF2006D
首先我们知道修改肯定是改到 1。
其次一个显然的贪心策略是排序后每次放一个最大一个最小,这显然是很优的。
如果最大值不在开头,那么我们完全可以把最大值的前缀翻转,这样对下一个位置的限制就变松了。
如果最小值不跟在旁边,那说明在旁边的这个值足够小,完全可以视作最小值。
那么我们来考虑这个策略能完成的条件,那就是 \(\forall i\le\sqrt{k} cnt(1,i)\ge cnt(\frac{k}{i},k)\)。
有用的 \(cnt\) 显然只有 \(2\sqrt{k}\) 个,维护前缀和即可查询,答案需要同时满足每个 \(i\) 限制,取最大值即可。
需要注意长度为奇数时的情况,以及可以第一维扫 \(i\) 来卡空间。
UOJ390
转化成考虑一个无限选人刀一滴血的序列,但选到似掉的就跳过。
容斥每个人似前没似的人数,然后考虑他们总共选了多少次。
假设有 \(j\) 个前面没似的人,加上查询的 \(i\) 总共选了 \(k\) 次,那么这个序列的生成概率是 \(\frac{1}{(j+1)^k}\)。
而前面这部分的贡献看着就很能背包啊,设 \(f(j,k)\) 为考虑一些人后有 \(j\) 个被钦定还没似,这些人用了 \(k\) 次,转移就是枚举这个人似不似,没似的话用了几次,插排进去。
查询的 \(i\) 单独考虑,也是插排进去。
啥你问没钦定的那些人怎么说?显然是不影响的,注意我们前面赋的生成概率。
这个五次方做法已经能过了,但还能再优一点:注意到每次查询相当于从所有物品中扣掉一个物品做的背包,这个首先可以缺一分治,而这个题的背包性质还好一些,它可以直接删!
这样就能做到四次方。