模板 倍增维护RMQ】的更多相关文章

倍增维护RMQ,nlogn预处理,O(1)查询 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+7; struct RMQ{ const static int RMQ_size = maxn; int n; int ArrayMax[RMQ_size][21]; int ArrayMin[RMQ_size][21]; int mm[RMQ_size]; void build_rmq(){ for(int j =…
在entity项目里新建模板DBEntity.tt <#@ template debug="false" hostspecific="true" language="C#" #> <#@ include file="$(SolutionDir)\Packages\T4.TemplateFileManager.2.1.2\tools\ttinc\TemplateFilemanager.CS.ttinclude"…
http://acm.hdu.edu.cn/showproblem.php?pid=2586 课上给的ppt里的模板是错的,wa了一下午orz.最近总是被坑啊... 题解:树上两点距离转化为到根的距离之和减去重复部分,相当于前缀和 dis[x] + dis[y] - 2ll * dis[LCA(x, y)] #define _CRT_SECURE_NO_WARNINGS #include<cmath> #include<iostream> #include<stdio.h&g…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意: 给出一棵 n 个节点的带边权的树, 有 m 个形如 x y 的询问, 要求输出所有 x, y节点之间的最短距离. 思路: dis[i] 存储 i 节点到根节点的最短距离, lca 为 x, y 的最近公共祖先, 那么 x, y 之间的最短距离为: dis[x] + dis[y] - 2 * dis[lca] . 解法1: tarjan离线算法 关于该算法 Tarjan(u)//marg…
之前在澡堂学过这么个东西,听课时理解非常透彻,然后做题时是这种状态: 因为并没有切板子题,最近切掉以后看同桌,他默默地说了一句话: 我是什么时候A的来着... 我当时就心态爆炸... 现在来进行简单整理 我发现想黈之前的博客非常难,因为之前写的博客都是什么东西啊 其实我本身来讲也能理解(疯狂为下次培训不好好整理找理由) 以为澡堂给的时间其实并不多,看上去有一中午加一晚上, 但是每天学的东西都非常之多,要是把每个板子题都切下,博客中的最详细内容就只能gu掉了... 心塞... (突然发现自己水了这…
倍增LCA \(fa[a][i]\)代表a的第\(2^{i}\)个祖先. 主体思路是枚举二进制位,让两个查询节点跳到同一高度然后再向上跳相同高度找LCA. int fa[N][21], dep[N]; void dfs(int u, int f) { dep[u] = dep[f] + 1, fa[u][0] = f; for (int i = 1;i <= 20;i++) fa[u][i] = fa[fa[u][i - 1]][i - 1]; for (int i = head[u];i;i…
RMQ,即区间最值查询,给定一个序列,求区间l-r的最大值.最小值. st表求RMQ,预处理On*logn,查询O1. 预处理: void init_rmq() { for(rll j=1;j<=lg[n];++j)//从当前点开始的2的j次方个点 { for(rll i=1;(i+(1<<j)-1)<=n;++i)//i+(1<<j)-1不能越界 { f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);//取最大值 }…
在树的路径上选取一些点 使得这些点权xor后的结果最大 思路: 时限60s 59696ms卡过去了哈哈哈 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int N=20005; ll Temp[128],ans; int n,q,first[N],next[N],v[N],t…
题目链接 构建完MST后,枚举非树边(u,v,w),在树上u->v的路径中找一条权值最大的边(权为maxn),替换掉它 这样在 w=maxn 时显然不能满足严格次小.但是这个w可以替换掉树上严格小于maxn的次大边 用倍增维护MST上路径的最大值.次大值,每条非树边的查询复杂度就为O(logn) ps:1.倍增更新次大值时,未必是从最大值转移,要先赋值较大的次大值,再与较小的那个最大值比较. 2.maxn!=w时,是可以从maxn更新的(不能更新就是上面情况啊) 倍增处理部分我还是在dfs里写吧…
题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2].一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1,2,1] 时,它的生成魔咒有 [1].[2].[1,2].[2,1].[1,2,1] 五种.S=[1,1,1] 时,它的生成魔咒有 [1].[1,1].[1,1,1] 三种.最初 S 为空串.共进行 n 次操作,每次操作是在 S 的结尾加入一个魔咒字符.每次操作后都需要求出,当前的魔咒串 S 共有多少…