51Nod 1174區間中最大值

2021-08-19 18:25:30 字數 883 閱讀 5017

題目要求,先輸入乙個陣列,然後求出陣列中某乙個區間中的最大值。

是不是覺得,我就直接用for迴圈就可以寫啦,賊好寫。。

這樣子講吧,如果你只搜尋一次的話,是看不出什麼區別的,但是如果你要搜尋m次,m又很大呢? 每一次都要用迴圈去乙個乙個比較嗎? o(n*m)的時間複雜度是不是會讓你體驗極差、、

這個題目在經過自己思考與借鑑其他人的部落格以後,判斷應該是有兩種方法可以解決這個問題,分別是線段樹和rmq演算法。

感覺還可以,話不多說上**:

#include #include #include #include #include using namespace std;

const int max = 10003;

int maxv[max*3];

int data[max];

int n;

void build(int node,int begin,int end)else

}int query(int k,int l,int r,int ql,int qr)

void update(int k,int l,int r,int p,int v) }

void print()

int main()

build(1,0,n-1);

int t;

cin>>t;

while(t --)

for (int j = 1; j <= log2[n]; j ++) }}

int query(const int& l, const int& r)

} rmq;

int main()

}return 0;

}

今天就寫到這裡吧,每一天都為了不辜負下一天而奮鬥!

51Nod 1174 區間中最大數

acm模版 給出乙個有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...

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