題目要求,先輸入乙個陣列,然後求出陣列中某乙個區間中的最大值。
是不是覺得,我就直接用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...