2023.4.24
T1
一个排列,求所有区间第二大。
只需要求出位置 \(i\) 的左边第一大和第二大即可,右边同理。
二分 + \(\text{ST}\) 乱搞。
T2
每次选择一个 \(i\),代价增加 \(h_{i-1}+h_i+h_{i+1}\),且令 \(h_i\rightarrow0\).
操作进行 \(n\) 次,问 \(n!\) 种排列中能最小化代价的方案数。
\(n\le 4000\) .
考虑 \(f(i,j)\) 表示 \(i\) 在第 \(j\) 次选择的最小代价(不计算 \(h_{i+1}\)).
那么
\[f(i,j)=\min(\forall_{x<i,y<j}f(x,y)+2h_i,\forall_{x<i,y>j}f(x,y)+h_i+h_{i-1})
\]
做下二维前缀即可。
有简单贪心方法但是没听懂。
T3
有 \(D\) 个点 ,数轴上 \(n\) 个整点。
设点 \(i\) 的位置为 \(a_i\),将它们从小到大排列。
问有多少 \(a\) ,使得 \(\forall i\in\lbrack1,n),a_{i+1}-a_i\le\max(R_i,R_{i+1})\) .
跟上一题差不多的套路。
在摆烂没听懂。急。