faebdc的煩惱 st表

2021-09-01 16:15:30 字數 677 閱讀 9511

傳送門

題目說a[i]遞增 , 極大降低了難度

我們將一樣的幾個點縮成乙個點 , 記錄l , r , num 表示縮的這個點對應的原區間以及長度

記錄pos 表示這個點對應縮的哪個點

然後直接對num 用st表

查詢即為

#include#define n 100050

using namespace std;

int n,q,a[n],l[n],r[n],pos[n];

int tot,st[n][20],log[n];

int rmq(int l,int r)

int main()

for(int i=2;i<=tot;i++) log[i]=log[i/2]+1;

for(int i=1;i<=17;i++)

for(int j=1;j<=tot;j++)

st[j][i] = max(st[j][i-1] , st[j + (1<

while(q--)

ans = max(ans , r[p1]-x+1);

ans = max(ans , y-l[p2]+1);

ans = max(ans , rmq(p1+1,p2-1));

printf("%d\n",ans);

}}

faebdc的煩惱 莫隊

題面有點難想的莫隊。首先我們肯定要乙個cnt i 記錄難度i出現的次數,但是我們發現每次刪去乙個難度後,如果那個難度的個數恰好是當前最多次數,我們就可能要更新一下答案,而這取決於有多少難度的個數恰好是當前最多次數,於是我們再開乙個sum i 記錄有多少難度的個數為i。經過上述分析容易得到莫隊更新規則...

ST表的學習

st表的優勢在於可以把查詢乙個區間的最值的時間複雜度降為o n o n o n 假設有乙個陣列裡有10000個元素,第i個元素記為ar i 我們用f i j 表示從第i個元素開始,向右i 2j 1的 這些元素的最大值。有f i j max f i j 1 f i 2j 1 j 1 這其實是把區間 i...

ST表(倍增表)

介紹st表之前先看看rmq問題是什麼東西吧 rmq range maximum minimum query 顧名思義,這就是指區間最大或最小值 區間最值 st表 spars table,一種可以解決rmq的,基於倍增的資料結構 令 f i j 表示從 i 開始連續 2 j 個數中的最值,如果 i 後...