RMQ模板

Posted Omz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RMQ模板相关的知识,希望对你有一定的参考价值。

预处理:

 1 void init(int n)
 2 {
 3     for (int i = 0;i < n;i++)
 4     {
 5         dp[i][0] = a[i];
 6     }
 7     int bitn = (int)(log(n)/log(2.0));
 8     for (int j = 1;j <= bitn;j++)
 9     {
10         for (int i = 0;i < n;i++)
11         {
12             if (i + (1 << j) - 1 >= n) break;
13             dp[i][j] = F(dp[i][j-1],dp[i+(1 << (j-1))][j-1]);//这个F就是一个功能函数
14         }
15     }
16 }

查询:

1 int que(int l,int r)
2 {
3     int k = (int)(log(r-l+1.0) / log(2.0));
4     return gcd(dp[l][k],dp[r-(1<<k)+1][k]);
5 }

 

以上是关于RMQ模板的主要内容,如果未能解决你的问题,请参考以下文章

RMQ模板

RMQ模板

RMQ问题模板

LCA上的RMQ模板算法

RMQ 模板 2012-09-13

静态RMQ模板题 contest 静态RMQ T2