題解 A君的問題 a (值域線段樹)

2022-02-19 19:49:11 字數 1129 閱讀 4073

這道題很水,但不要問ssw02為什麼要在這時做一道b層的題

因為ssw02再換板子,而這道題就是二分值域線段樹的裸題

感謝神犇sxk提供優質的模板參考

【題目描述】

a君來到了乙個蛋糕店,蛋糕店有n個位置順次擺放著若干蛋糕,從左到右位置編號依次遞增。當有客人來的時候服務生會把有些位置的蛋糕打包給客人,也可能會在某個沒有蛋糕的空位放上乙個蛋糕。a君想知道在某一時刻從左數第k個蛋糕的位置。

【輸入資料】

第一行乙個正整數n,m,其中n表示位置數量,m表示客人的數量。第二行n個數為0或1,第i個數表示開始時沒有蛋糕(0)或者有蛋糕(1)。接下來共m行每行倆個數p,k,其中k如上文,p表示第p個位置有無蛋糕的情況發生了變化。

【輸出資料】

m行,每行乙個數表示詢問的結果,若不存在k個蛋糕則輸出」-1」(不含引號)。

沒有思路,單點修改+單點查詢(查詢二分當前區間個數就可以了)

我只是想把它當個板子記一下而已(以前的太醜了)

#includeusing namespace std; 

const int maxn = 500005 ;

int n , m , num , sum[ maxn<<2 ] , a[ maxn ] ;

inline int read()

void build( int p , int l , int r )

int mid = (l+r)>>1 ;

build( p<<1 , l , mid ) ;

build( p<<1|1 , mid+1 , r ) ;

sum[ p ] = sum[ p<<1 ] + sum[ p<<1 | 1 ] ;

}void change_a( int p , int l , int r , int x , int v )

int ask( int p , int l , int r , int k )

int main()

return 0 ;

}

它就是個板子,ssw02還要改動態區間第k大,先溜了。(本部落格無任何價值)

值域線段樹and動態開線段樹

值域線段樹每乙個節點代表乙個值,其他沒什麼區別 動態開樹就是節省了沒有用到節點,其中重要一點的是不需要節點是連續的 即id值是任意的,只要可以找到即可 例題 bzoj 4627迴轉壽司 題意 給n個數問區間和在l sum r sum l 1 r區間有多少個 n 100000,ai 100000,0 ...

主席樹 可持久化值域線段樹

主席樹是可持久化的線段樹,其最大的優點就是在消耗記憶體較少的情況下保證了線段樹的結構。那麼什麼是主席樹呢?對於區間 1,n 對於每乙個子區間 1,i 建立一棵線段樹 1 i n 線段樹的每乙個節點存某個字首 1.i 中屬於區間 l.r 的數一共有多少個,這就是一顆主席樹。如果我們對於每乙個區間都建一...

線段樹 題解

nyoj 1068 題目鏈結 題目意思 典型的線段樹,插線問線.不過多了乙個,a 操作某乙個區間乙個數整體加上乙個數 s 操作查詢某乙個區間的總和,q 操作,查詢這個區間有多少個奇數.下面是 線段樹延遲更新,奇數的個數更新時注意 如果變化的是奇數,那麼 現在區間奇數個數 區間長度 原本區間的奇數個數...