1174 區間中最大的數

2021-06-20 14:46:26 字數 1200 閱讀 9244

1174 . 區間中最大的數

時間限制:1 秒 空間限制:65536 kb 分值: 0

給出乙個有n個數的序列,編號0 - n - 1。進行q次查詢,查詢編號i至j的所有數中,最大的數是多少。

例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為7。(該問題也被稱為rmq問題)

input

第1行:1個數n,表示序列的長度。(2 <= n <= 10000)

第2 - n + 1行:每行1個數,對應序列中的元素。(0 <= s[i] <= 10^9)

第n + 2行:1個數q,表示查詢的數量。(2 <= q <= 10000)

第n + 3 - n + q + 2行:每行2個數,對應查詢的起始編號i和結束編號j。(0 <= i <= j <= n - 1)

output

共q行,對應每乙個查詢區間的最大值。
input 示例

517

6313

0 11 3

3 4

output 示例

7

73

rmq問題,直接的有o(n^2)的做法,可以壓縮空間有o(nlogn)的做法,還有更好的線段樹的做法,這裡採用o(nlogn)的做法:

#include #include #include #include #define max 10005

/*方法2:

st演算法

m[ i ][ j ] 是以i 開始,長度為 2^j 的子陣列的最小值的索引

分兩個區間,m[i][j]為這兩個區間最值的索引

則m[i][j]=

構造m時間複雜度o(nlogn)

如何求區間的最值rmq[i][j]?

設k=log(j-i+1)

rmq[i][j]=

時間複雜度o(1)

*/

void rmq2(int m[15], int a, int n)

int m[max][15];

int s[max];

int main(){

#ifndef wangchuan

freopen("c:\\in.txt","r",stdin);

#endif

int n,q;

scanf("%d",&n);

for(int i=0;i

51Nod 1174 區間中最大的數

給出乙個有n個數的序列,編號0 n 1。進行q次查詢,查詢編號i至j的所有數中,最大的數是多少。例如 1 7 6 3 1。i 1,j 3,對應的數為7 6 3,最大的數為7。該問題也被稱為rmq問題 第1行 1個數n,表示序列的長度。2 n 10000 第2 n 1行 每行1個數,對應序列中的元素。...

51nod 1174 區間中最大的數

1174 區間中最大的數 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏關注給出乙個有n個數的序列,編號0 n 1。進行q次查詢,查詢編號i至j的所有數中,最大的數是多少。例如 1 7 6 3 1。i 1,j 3,對應的數為7 6 3,最大的數為7。該問題也被稱為r...

51nod 1174 區間中最大的數

1174 區間中最大的數 基準時間限制 1 秒 空間限制 131072 kb 給出乙個有n個數的序列,編號0 n 1。進行q次查詢,查詢編號i至j的所有數中,最大的數是多少。例如 1 7 6 3 1。i 1,j 3,對應的數為7 6 3,最大的數為7。該問題也被稱為rmq問題 input 第1行 1...