寫了那麼多xx樹和單調佇列後,不如試試爽翻天的倍(r)增(m)吧(q)。
對於每乙個點,維護從它為起點向左2^j長度的最大值。
查詢的時候從大往小列舉2^j更新最大值就行。
(等等好像**注釋裡面寫過這些了)
(不保證**的正確性。。。反正洛谷的資料水過了。。。)
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7view code8using
namespace
std;
910 typedef long
long
ll;11
12char s[10
];13 ll m, d, a[300000], f[300000][30
], x, p, t;
1415
/*16
f[i][j] : 從i開始,往左2^j長度的最大值。
17f[i][0] = a[i]
18f[i][j] = max(f[i][j - 1], f[i - (1 << (j - 1))][j - 1])
1920
1 2 3 4 5 6 7 8
21*/
2223 ll ask(int l, int
p)33}34
}35return
ret;36}
3738
intmain()else52}
53}54}
55 }
洛谷1198最大數(線段樹)
現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對乙個固定...
洛谷 P1198 最大數
題目描述 現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果...
洛谷1198 最大數 線段樹
現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。l 0 2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對...