ez round,一听说 unr 了就马上睡觉了,后面的题不想做了。
A
$b-a$。
B
实现上我是先求出每一行在哪里,塞进 vector,然后再 reverse 一下。
C
直接放代码,不太好讲:
void solve()
{
int n=R,m=R,k=R;
int ans=max((n+k-1)/k,(m+k-1)/k)*2;
if((n+k-1)/k>(m+k-1)/k) ans--;
write(ans),puts("");
}
D
一开始写挂了一发(忘了有重点),我们考虑有以下四种情况:
– |\
|/ |-
– /\
\/ –
都不难判断。
E
不难发现函数单谷,三分即可。
F
不难注意到使用类似于分块的方式统计答案即可。
散块用前缀和辅助统计。
有意思的是你没判同块情况大概率能过,这是因为加法是具有完全“可减性”的运算,一些你算的东西变成了负数,刚刚好抵消了。
G1
G 系列有点困难。
G1 我们直接考虑 ai-=i 然后统计 k-众数出现次数 即可。
G2
这边需要一个强劲的注意力!
注意到如果我们把 G1 的答案记在 l 上记作 $t_l$。
那么 $f(l,r)=\min_{i=l}^{r-k+1} t_i$。
那么这个题就非常好做了!
我们离线所有询问,对于 $l$ 倒着扫描线即可。
G3
我们不难注意到,对于 G2 的做法随便扩展一下,其实区间子串权值和等价于你对于左端点扫描线,做一下历史和的区间和即可。