预处理:

 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 }

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2021-12-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-29
  • 2021-06-13
  • 2022-12-23
  • 2021-09-29
  • 2021-04-05
  • 2021-12-21
相关资源
相似解决方案