很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。
這讓很多學生很反感。
不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。
input
本題目包含多組測試,請處理到檔案結束。
在每個測試的第一行,有兩個正整數 n 和 m ( 0output
對於每一次詢問操作,在一行裡面輸出最高成績。
sample input
5 61 2 3 4 5
q 1 5
u 3 6
q 3 4
q 4 5
u 2 9
q 1 5
sample output56
59初始化:以c[i]為i到i-lowbit(i)+1項中的最大值
更新:需要更新的c[i]與普通的樹狀陣列相同,但是更新時還是要從i到i-lowbit(i)中取最大值
尋找l到r區間最大值:對於以c[r]來說它的右端點是r,左端點是r-lowbit®+1,所以當左端點可以縮小時我們縮小右端點的同時縮小左端點,直到左端點跳到要查的區間外面,就讓右端點-1繼續找,當r=l時,結束.
#include
#include
using namespace std;
int a[
800005
],c[
800005];
int n,m;
void
geng
(int x,int y)
}int find
(int l,int r)
ans=
max(ans,a[r]);
}return ans;
}int main()
} char s[2]
; int x,y;
for(int i=
0;i)else}}
return0;
}
樹狀陣列求區間最值
樹狀陣列 binary index tree 利用二進位制的一些性質巧妙的劃分區間,是一種程式設計,時間和空間上都十分理想的求區間和的演算法,同樣我們可以利用樹狀陣列優美的區間劃分方法來求乙個序列的最值 約定以 num 表示原陣列,以 idx 表示索引陣列,lowbit x x x 樹狀陣列求和時通...
樹狀陣列求區間最值
樹狀陣列 binary index tree 利用二進位制的一些性質巧妙的劃分區間,是一種程式設計,時間和空間上都十分理想的求區間和的演算法,同樣我們可以利用樹狀陣列優美的區間劃分方法來求乙個序列的最值 約定以 num 表示原陣列,以 idx 表示索引陣列,lowbit x x x 樹狀陣列求和時通...
樹狀陣列維護區間最值
題目描述 給你乙個1 n的排列和乙個棧,入棧順序給定 你要在不打亂入棧順序的情況下,對陣列進行從大到小排序 當無法完全排序時,請輸出字典序最大的出棧序列 輸入描述 第一行乙個數n 第二行n個數,表示入棧的順序,用空格隔開,結尾無空格 輸出描述 輸出一行n個數表示答案,用空格隔開,結尾無空格 示例1輸...