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})\) .

跟上一题差不多的套路。

在摆烂没听懂。急。

posted @ 2023-08-06 19:57  SError  阅读(8)  评论(0编辑  收藏  举报