心得:
提高要求,真的是大众分!!!
T1dalao们10分钟切完,而我搞了1小时,T2只会打暴力,虽然思考方向没错,但是没想出来,T3也是只会打暴力,考场找规律也是可行的
题解
T2「前缀和」「单调栈」
首先离散一下,对于离散后的数组,考虑将每个数作为最大值的次数记录到桶中
只需要知道每一位作为最大值的区间就行,用单调递减的栈实现,注意对于相等的点,不要加重
然后就可以求前缀和并$O(1)$查询,还要注意考虑查询的k是不是在原数组中存在
int:2e9!!!没开ll卡了好久
T3「动态规划」
f[i]:长度为i-1的排列们,搞成符合要求的所需代价和
将i插入到i-1的排列中,挤到最后的第i位可以是1~i,
若第i位是i,那么只需要将前i-1进行操作即可
若第i位是1~i-1,那么就可以看成前i-1个数先排成有序的,代价f[i-1],然后把最后一位移到它该在的位置,由于前i-1位有(i-1)!种排列,还要乘上它
定义g[k]为最后一位是k,回到该在的位置的代价
g[1]=1,g[2]就是在回到1的基础上再加一步即g[2]=g[1]+1,g[3]就是在回到2的基础上再加一步即g[3]=g[2]+g[1]+1
举个例子12453 31245 13245 21345(到这就是g[2]) 12345一共4步
这样就是$f[i]=f[i-1]+sum(f[i-1]+fac[i-1]*g[k])(1<=k<i)$
发现$g[k]=2^{k-1}$使用等比数列求和优化成O(n^2)