rmq plus

xiaoxiao2021-02-28  75

#include<bits/stdc++.h> using namespace std; #define N 50010 int maxl[N][16], minl[N][16]; int n, m, a[N]; void S_table() { int l = int(log((double)n)/log(2.0)); for (int j=1;j<=l;j++) { for (int i=1; i + (1 << (j-1) ) - 1 <=n;++i) { maxl[i][j] = max(maxl[i][j-1], maxl[i + (1 << (j-1) )][j-1]); minl[i][j] = min(minl[i][j-1], minl[i + (1 << (j-1) )][j-1]); } } } void rmq(int l, int r) { int k = int(log((double)(r-l+1))/log(2.0)); int a1 = max(maxl[l][k], maxl[r - (1<<k) + 1][k]); int a2 = min(minl[l][k], minl[r - (1<<k) + 1][k]); printf("Max: %d Min: %d\n", a1, a2); } int main() { while (~scanf("%d %d", &n, &m)) //n long m query { for (int i=1;i<=n;++i) { scanf("%d", &a[i]); maxl[i][0] = minl[i][0] = a[i]; } S_table(); int a, b; while (m--) { scanf("%d %d", &a, &b); rmq(a, b); } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-23781.html

最新回复(0)