首页 > 其他 > 详细

RMQ模板

时间:2018-05-19 00:33:20      阅读:260      评论:0      收藏:0      [点我收藏+]

预处理:

 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模板

原文:https://www.cnblogs.com/kickit/p/9058556.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!