zoukankan      html  css  js  c++  java
  • 【hihoCoder第十六周】RMQ-ST算法

    RMQ的大裸题。没什么意思。开始数组开小了,RE了一次。下面放代码。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 vector<int> A;
     5 int dp[1000005][20];
     6 
     7 void RMQ_init () {
     8     int n = A.size();
     9     for (int i = 0; i < n; ++ i) {
    10         dp[i][0] = A[i];
    11     }
    12     for (int j = 1; (1 << j) <= n; ++ j) {
    13         for (int i = 0; i + (1 << j) - 1 < n; ++ i) {
    14             dp[i][j] = min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
    15         }
    16     }
    17 }
    18 
    19 int RMQ (int L, int R) {
    20     int k = 0;
    21     while ((1 << (k + 1)) <= R - L + 1) ++ k;
    22     return min(dp[L][k], dp[R - (1 << k) + 1][k]);
    23 }
    24 
    25 int main () {
    26     int n;
    27     while (~scanf ("%d", &n)) {
    28         int x, op_n;
    29         for (int i = 0 ; i < n; ++ i) {
    30             scanf ("%d", &x);
    31             A.push_back(x);
    32         }
    33         /*
    34         for (int i = 0; i < A.size() - 1; ++ i) {
    35             cout << A[i] << endl;
    36         }
    37         */
    38         RMQ_init ();
    39         int a, b;
    40         scanf ("%d", &op_n);
    41         for (int i = 0; i < op_n; ++ i) {
    42             scanf ("%d%d", &a, &b);
    43             printf ("%d
    ", RMQ(a - 1, b - 1));
    44         }
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    b站尚硅谷MySQL笔记(婷姐初级,周阳高级)
    word--公式添加编号
    excel--长数字显示问题
    R语言--蒙特卡洛计算定积分
    数学
    数学
    Computer Science
    Computer Science
    Computer Science
    元学习
  • 原文地址:https://www.cnblogs.com/Destiny-Gem/p/4034021.html
Copyright © 2011-2022 走看看