51nod 1174 區間中最大的數 線段樹

2021-07-22 19:58:21 字數 1209 閱讀 7111

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。(該問題也被稱為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

典型的一道線段樹的模板題,如果是初學者的話,可以去先看看線段樹的基本概念,然後看下我的**,我給**附上了注釋= ̄ω ̄=

#include#include#includeusing namespace std;

int n,sum[40005];

void update(int rt)//向上更新節點時,每個節點儲存下兩個節點的最大值

void build(int l,int r,int rt)//建樹

m=(r+l)/2;

build(l,m,rt*2);

build(m+1,r,rt*2+1);

update(rt);

}int query(int l,int r,int l,int r,int rt)//進行查詢

int m=(l+r)>>1;

int ret=0;

if(l<=m)//如果m比需要搜尋的左區間大的時候,那麼m留下,作為搜尋到的右區間

if(r>m) //如果m比需要搜尋的右區間小的時候,那麼m留下,作為搜尋到的左區間

return ret;

}int main()

return 0;

}

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...