zoukankan      html  css  js  c++  java
  • 倍增模板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;
    }

  • 相关阅读:
    PSR
    php类与对象
    二进制、位运算及其用处
    安装LNMP笔记
    计算机基础
    Python3编写HFS(CVE2014-6287)检测脚本
    windows和iis对应版本关系
    phpStudy8.1.0.1配置子域名多网站
    Xml外部实体注入
    xss小游戏通关-全答案
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7552904.html
Copyright © 2011-2022 走看看