首页 > 其他分享 >题解 CF1523H Hopping Around the Array

题解 CF1523H Hopping Around the Array

时间:2024-02-27 20:45:19浏览次数:25  
标签:le Around limits 题解 询问 个点 max Array log

\(\texttt{link}\)

题意

数轴上有 \(n\) 个点,每个点有属性 \(a_i\),在第 \(i\) 个点可以花费 \(1\) 的步数移动至 \([i,i+a_i]\) 中任意一个点。定义一次操作为选出一个 \(i\),使 \(a_i\gets a_i +1\)。

\(q\) 组询问,每次给出 \(l,r,k\),求有 \(k\) 次操作机会时,从第 \(l\) 个点走到第 \(r\) 个点的最小步数。各组询问相互独立,即操作没有后效性。

\(1\le n,q\le 2\times 10^4,1\le a_i\le n,0\le k\le 30\)

题解

可以先想一个暴力,用 \(f_{i,j,k}\) 表示从 \(i\) 出发,走 \(j\) 步,至多操作了 \(k\) 次时能走到的最远点,查询时只需在 \(f_{l,x,k}\) 上二分 \(x\) 即可,依据是每次转移是连续的,跳到一个大于 \(r\) 的点必定可以跳到 \(r\)。

由此有转移方程 \(f_{i,j,k}=\max\limits_{k_1+k_2=k}\{\max\limits_{s=i}^{f_{i,j-1,k_1}}\{s+a_s+k_2\}\}\),原因也是能从若 \(i\) 走到 \(x\),那 \([i,x]\) 中的每个点都必定可以经过,即在其中取下一步的最远点,这个过程是 RMQ 问题,用 ST 表优化。

这样转移状态是 \(O(n^2 k)\) 的,发现查询时的二分本质上就是步数的倍增,我们只关注走了 \(2^j\) 步的情况,改变 \(f\) 定义,\(f_{i,j,k}\) 表示从 \(i\) 出发,走 \(2^j\) 步,至多操作了 \(k\) 次时能走到的最远点。转移方程为 \(f_{i,j,k}=\max\limits_{k_1+k_2=k}\{\max\limits_{s=i}^{f_{i,j-1,k_1}}f_{s,j-1,k_2}\}\),初始化 \(f_{i,0,k}=i+a_i+k\),直接枚举 \(k_1,k_2\) 转移,用 ST 表可做到 \(O(nk^2\log n+nk\log^2n)\) 预处理。

对于每次询问,类似倍增求树上 \(k\) 级祖先,从 \(\log n\) 位开始从大到小考虑,令 \(g_{j,k}\) 表示考虑完 \([j,\log n]\) 位,至多操作了 \(k\) 次时,\(l\) 能去到最远位置,若对于所有 \(k\),均满足 \(\max\limits_{k_1+k_2=k}\{\max\limits_{s=l}^{g_{j+1,k_1}}f_{s,j,k_2}\}< r\),说明不存在任何转移方式可以通过这 \(2^j\) 步走到 \(r\),换言之这 \(2^j\) 步是必走的,于是答案加上 \(2^j\),并更新 \(g_{j,k}=\max\limits_{k_1+k_2=k}\{\max\limits_{s=i}^{g_{j+1,k_1}}f_{s,j,k_2}\}\),否则这 \(2^j\) 步是不必要的,答案不变,并让 \(g_{j,k}=g_{j+1,k}\)。

你发现每次询问都要预处理 \(\log n\) 次 ST 表,单次查询复杂度是糟糕的 \(O(nk\log^2 n)\),但是对于每组询问,\(f\) 是不变的,不必每次都预处理,于是把询问离线下来,对于每个 \(j\) 把每组询问都更新一遍即可。

总时间复杂度 \(O((n+q)(k^2\log n+k\log^2n))\),空间复杂度 \(O(nk\log n)\)。

注意空间访问尽量连续,不知道会不会卡常。

标签:le,Around,limits,题解,询问,个点,max,Array,log
From: https://www.cnblogs.com/Terac/p/18038210

相关文章

  • 题解 CF983D Arkady and Rectangles
    \(\texttt{link}\)题意平面直角坐标系上给定\(n\)个矩形,第\(i\)个矩形颜色为\(i\),颜色大的矩形将覆盖颜色小的矩形,问最后能看到几种颜色。\(1\len\le10^5,|x_i|,|y_i|\le10^9\)题解首先离散化,考虑扫描线如何维护序列上的颜色。一个区间\([l,r]\)投射到线段树上\(......
  • AT_arc117_c [ARC117C] Tricolor Pyramid 题解
    [ARC117C]TricolorPyramid博客阅读体验(也许)更佳题意给一个金字塔的底部颜色组成和生长规律,问顶部的颜色是什么。分析试几次就可以很容易得到的一种构造:令颜色B为\(0\),W为\(1\),R为\(2\)。设左右两个方块的颜色分别为\(col_l\)和\(col_r\),则生长规则可以描......
  • P5605 小 A 与两位神仙 题解
    推销博客P5605小A与两位神仙题意给定\(x\)、\(y\)和\(m\),其中\(m=p^n,n\in\mathbb{N+},p\ge3\),问同余方程\(x^a\equivy\pmodm\)是否有非负整数解。分析前置芝士Pollard_rho原根化简对这种指数型的同余方程是很难解决的,我们要先把它转化成线性的同余方......
  • [ARC121B] RGB Matching 题解
    题意有\(2N\)个物品,每个物品有可爱度\(a_i\)和颜色\(c_i\),将其两两配对。假设物体\(i\)和\(j\)配对,则\(c_i\neqc_j\),则会增加\(|a_i-a_j|\)的不满意度,求最小的不满意度。分析这道题可以贪心解决。我们尽量让每一对物品颜色相同,令每种颜色的总个数为\(cnt_c\),......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    [ABC270G]SequenceinmodP博客阅读可能体验更佳题意给出递推式如下,求最小的使\(X_i=G\)成立的\(i\)。\[X_i=\begin{cases}S&i=0\\(A\timesX_{i-1}+B)\bmodp&i\ge1\end{cases}\]分析这里分几种情况来分析:当\(A=0\)时,\(X_i\)要么等于\(S\),要么等于\(B\),直......
  • CF1928C Physical Education Lesson 题解
    洛谷传送门原题传送门题意一种上下波动的数组,给出所在的位置\(n\)和对应的数字\(x\),求出有几种数组满足条件。令\(k\)为最大值,则数组长成这样子:\[1,2,3,\cdots,k-1,k,k-1,k-2,\cdots,2,1,2,3,\cdots\]如图,每\(2(k-1)\)就循环一次。分析因为每\(2(k-1)\)......
  • CF1477A Nezzar and Board 题解
    题意给出数列\(S=\{a_i\}\)和整数\(k\),求是否能通过下面的操作使得\(k\inS\)?操作:选取\(x,y\inS\),将\(2x-y\)加入\(S\)中。分析观察操作可以发现,\(2x-y\)实际上就是数轴上\(y\)关于\(x\)的对称点,因此这个操作只与\(x\)和\(y\)在数轴上的相对位置有关,与......
  • [ABC342D] Square Pair 题解
    洛谷传送门原题传送门题意给出一个数列\(A\),求出满足\(A_iA_j\)为完全平方数的无序数对\((i,j)\)的个数。分析容易想到(但是我在昨晚没想到,可以原地AFO了),对于每个数,如果是\(0\)的话可以直接统计答案(记录\(0\)的个数\(cnt\),最后\(ans\leftarrowans+cnt(n-cnt)+\f......
  • [ABC342E] Last Train 题解
    洛谷传送门原题传送门题意给出一些由\((l,d,k,c,A,B)\)描述的列车,表示每当时间为\(l,l+d,l+2d,\cdots,l+(k-1)d\)时有一半列车从\(A\)出发,经过\(c\)的时间到达\(B\)。问如果从站点\(i,i\in(0,n)\)出发要去站点\(n\),最晚什么时候到达站点\(i\)可以去到站点\(n\)......
  • [ABC342C] Many Replacement 题解
    洛谷传送门原题传送门题意给出由小写字母初始字符串,每次操作将字符串中所有为\(c\)的字符改为\(d\)。输出最终的字符串。分析很明显只需要开一个\(fa\)数组,其中\(fa[i]=j\)表示字母\(i\)被改为了\(j\)。对于每次操作只需要遍历\(26\)个字母,将\(fa[i]=c\)的那些......