Loading

模拟赛10.11 解题报告

T1 染色

题意:给出 \(n\),造 \(n\)\(\ge1\) 的数 \(a_{1...n}\),满足对于任意 \(1\le i<j\le n\),若 \(j-i\) 为质数,那么 \(a_i\not =a_j\),最小化 \(\max\limits_{1\le i\le n}\{a_i\}\)


我们通过爆搜发现对于 \(\ge 7\)\(n\),答案始终为 \(4\),方案为 \(1,2,3,4,1,2,3,4,1,...\),不难发现这种方案是正确的,因为没有质数是 \(4\) 的倍数。

由于样例直接给出 \(n=7\) 的情况,因此我们只需要大力分类 \(n=1,2,3,4,5,6\) 的情况,\(n\ge 7\) 直接输出即可。


T2 序列

题意:

\(1\le T\le 5,\space 1\le n\le10^9,\space 1\le k,m\le 2\times10^5,\space 1\le D\le10^{18},\space 1\le a_i\le 5000\)


考场写了一个错解。

枚举 \(\min b_i\),然后贪心分配剩下的。

但是会超时,感性认为这是一个单峰函数,考虑直接二分。

被卡 \(95pts\),听说三分可以过 \(100pts\),果然三分的容错率就是比二分高。

正解咕着。


T3 树上询问

题意:一棵树,\(q\) 次询问。每次给出 \(u,v\),求从 \(u\) 走到 \(v\),有多少个点满足 点的编号 \(=\) 走到这个点的步数。


一眼 \(\text{NOIP2016 TG}\) 天天爱跑步

考虑拆成 \(u\rightarrow lca,\space lca\rightarrow v\) 两部分。

对于第一部分,需满足 \(dep[u]-dep[x]=x\Rightarrow dep[x]+x=dep[u]\)

对于第二部分,需满足 \(dep[u]+dep[x]-2\cdot dep[lca]=x \Rightarrow x-dep[x]=dep[u]-2\cdot dep[lca]\)

把询问标记放到 \(u,v,lca,fa(lca)\) 上,离线遍历一遍即可,时间复杂度为 \(O(n+q)\),可以选择性带 \(\log\)

T4 莫队

题意:一个序列 \(a_{1...n}\),支持两种操作:

  • 1 x y 修改 \(a_x\leftarrow y\)

  • 2 l r 查询 \([l,r]\) 有多少个子区间满足数字两两不同。

\(1\le n,q\le 2\times 10^5,\space 1\le a_i\le n\)


\(d_i\) 为上一个 \(=a_i\) 的数的位置。

\(p_i=\max\limits_{j\le i}\{d_j\}\),不难发现,当 \(i\) 作为右端点时,左端点可取 \([p_i+1,i]\),有 \(i-p_i\) 种方案。

对于每个询问 \([l,r]\),我们可以找出一个分界点 \(x\)

  • 对于 \(1\le i\le x\),满足 \(p_i<l\)

  • 对于 \(x<i\le r\),满足 \(p_i\ge l\)

第一部分的贡献为 \(\frac{(l+x)(x-l+1)}2\),只与 \(x\) 有关,容易处理。

第二部分的贡献为 \(\sum\limits_{i=x+1}^r (i-p_i)=\frac{(x+1+r)(r-x)}2-\sum\limits_{i=x+1}^r p_i\),我们还需要求出 \(x+1...r\)\(p\) 的区间和。

现在有三个问题:

  • 动态修改,动态维护 \(d_i\)

  • 快速找出分界点 \(x\)

  • 快速查询 \(p\) 的区间和。

对于第一个问题,考虑在值域上搞,设 \(S_i\) 表示 \(a_j=i\)\(j\) 的集合。

修改 \(a_x\leftarrow y\),我们需要在 \(S_{a_x}\) 中删除 \(x\),然后在 \(S_y\) 中插入 \(x\)

删除 \(x\),我们找出 \(S_{a_x}\)\(x\) 的后继 \(nxt\),那么修改 \(d_{nxt}\leftarrow d_x\)

插入 \(x\) 后,找出 \(S_{y}\)\(x\) 的前驱 \(pre\) 和后继 \(nxt\),那么修改 \(d_x\leftarrow pre\)\(d_{nxt}\leftarrow x\)

可以用 \(\text{set}\),支持查找前驱后继。

对于第二个问题,我们考虑对 \(d_{1...n}\) 建立线段树,然后一段前缀 \(\max\) 对于一个 \(p_i\),可以在线段树上二分处理。

对于第三个问题,我们不禁想到经典题——Luogu4198 楼房重建,这里使用兔队线段树维护前缀最大值之和即可。

时间复杂度 \(O(n+q\log^2 n)\)

posted @ 2023-10-11 15:21  Lgx_Q  阅读(17)  评论(0编辑  收藏  举报