原题链接:luogu
题意简述:
(蒯来的)
数轴上有n个点,有一个青蛙在这些点上跳;规则是每次向距当前点第k小的点跳,如果有相同距离则向下标较小的跳;求从每个点出发跳了m次后在哪里;
思路
这个是我集训某天的原题。像这种第 k k k大的问题通常是最难处理的问题。但是我们非常明显的有一个暴力想法:由于 k k k是定值,预处理出每个点开始第 k k k大到哪,然后暴力跳一下即珂。 O ( n 2 + n m ) O(n^2+nm) O(n2+nm)???
珂是我真的就是一个智障 w o c woc woc,都想到这里了,再结合昨天讲倍增,不好好想想倍增做法! f ∗ ∗ k f**k f∗∗k!(我太菜了。。。)
倍增做法:设 j u m p [ i ] [ k ] jump[i][k] jump[i][k]表示从 i i i开始跳 2 k 2^k 2k步能到哪里,然后你就只要 j u m p [ i ] [ k ] = j u m p [ j u m p [ i ] [ k − 1 ] ] [ k − 1 ]