• 倍增模板orz


    • #include<iostream>
      #include<cstdio>
      #include<cstdlib>
      #include<algorithm>
      #include<cmath>
      #include<cstring>
      #define ll long long
      using namespace std;
      int dp[100010][22];
      void RMQ_init(int l, int r)
      {
          int i, j;
          for (i = l; i <= r; ++i)scanf("%d",&dp[i][0]);
          for (j = 1; l + (1 << j) - 1 <= r; ++j)
          {
              for (i = l; i + (1 << j) - 1 <= r; ++i)
              {
                  dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
              }
          }
      }
      int ST(int l, int r)
      {
          int k = log2(r - l + 1);
          return max(dp[l][k], dp[r - (1 << k) + 1][k]);
      }
      int main()
      {
          int n;
          cin>>n;
          RMQ_init(1,n);
          int q;
          cin>>q;
          while(q--)
          {
              int l,r;
              cin>>l>>r;
              cout<<ST(l,r)<<endl;
          }
      }
      RMQ
    倍增优化转移

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<string>
    using namespace std;
    int bin[70];
    int dp[3000][70];
    int main()
    {
    bin[0]=1;
    for(int i=1;i<70;i++)bin[i]=bin[i-1]<<1;
    int n;
    int q;
    cin>>n;
    cin>>q;
    for(int i=1;i<=n;i++)cin>>dp[i][0];
    for(int i=1;i<70;i++)
    for(int j=1;j<=n;j++)dp[j][i]=dp[dp[j][i-1]][i-1];
    while(q--)
    {
    int t,k;
    cin>>t>>k;
    for(int i=0;i<70;i++)
    if(k&bin[i])t=dp[t][i];
    cout<<t<<endl;
    }
    return 0;
    }

  • 相关阅读:
    adb使用项目导入等
    ThreadLocal类理解
    Spring MVC MyBatis
    Spring MVC原理图
    Spring MVC返回JSON的几种方法
    Understanding REST
    链表
    存储构造题(Print Check)
    线状DP(石子归并)
    线段树(与区间有关的操作)
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7552904.html
Copyright © 2020-2023  润新知