倍增
Zolrk
这个作者很懒,什么都没留下…
展开
-
Noip 2012 开车旅行 - 倍增DP
我们先用set预处理出,在每一个城市,A和B下一次分别要去的地方 那么是求对于距离每个城市最小的和次小距离的其他城市。 由于set的自动有序性,我们可以先找到位于城市的指针,然后找这个指针左边的两个,右边的两个,最小和次小距离一定在这四个数之中。 然后一个一个点模拟会T掉。。。我们可以设小A,小B各开一次车为一轮,f(i,j)f(i,j) 表示在第i个城市,开2j2^j 轮车会到的城市,da原创 2017-10-11 10:50:48 · 504 阅读 · 1 评论 -
Noip2013 货车运输 - 生成树 - 倍增
这道题是一类树的瓶颈问题。 题意是求两点路径上的最小的最大边(在图中,两点之间路径不只一条),那么肯定这条最大边存在于最大生成树上。 因此我们可以将图的问题转化为树上问题。树上两点之间的路径一定经过lca,因此这条路我们可以由lca分成两条链。然后就是更新答案,比较暴力的想法是从两个点分别走到lca,然后更新答案。 这样复杂度有点高,我们想想如何优化暴力走路的过程。 没错,用倍增,把O(n)复杂度的走路优化到O原创 2017-10-22 17:40:37 · 264 阅读 · 0 评论 -
st表模板
两个比较麻烦的地方: 1.st[i][j] = max(st[i][j-1], st[i+(1<<j-1)][j-1]); 2.ans = max(st[l][k],st[r-(1<<k)+1][k]); 对于1,st[i][j]表示[i,i+2j−1][i,i+2j−1][i, i+2^j-1]区间上的最值,也就是包含iii的2j2j2^j个数 对于2,这是可能重...原创 2017-10-16 21:37:01 · 315 阅读 · 0 评论