sparse-table模板

预处理:

 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 }

 

posted @ 2018-05-19 00:17  qrfkickit  阅读(274)  评论(0编辑  收藏  举报