數列分塊 1 9

2022-04-02 13:22:20 字數 962 閱讀 3804

如果還不了解什麼是分塊,清先閱讀分塊link這一篇文章

描述: 給出乙個長為\(n\)的數列,以及\(n\)個操作,操作涉及區間加法,單點查值 , 題目[link]: qwq

首先看到這個題,是可以有很多思路的,這道題幾乎涉及很多的資料結構問題模板,但是主要這裡主要講解為數列分塊

其實早就予以給出了什麼是分塊,我們也是可以模擬一下線段樹, 我們用乙個個的塊來維護,我們用\(lazy\)來記錄一下它的加法標記,這樣也就不必要進行下傳,如果是那樣下穿的,恭喜你,你分了個錘子,時間複雜度不減反公升(因為你還需要處理塊呀) ,

#include #include #include #include #include #include #include #include #define int long long

#define qwq printf("執行過了\n") ;

#define inf 0x3f

using namespace std;

const int maxn = 50000 + 10 ;

inline int read()

while( isdigit(ch))

return x * f ;

} int n , st ;

int num[maxn] , block[maxn] , lazy[maxn];

void add(int a , int b , int c)

if(block[a] != block[b]) }

for(int i = block[a] + 1 ; i <= block[b] - 1 ; i++) }

signed main()

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

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

return 0 ;

}

數列分塊入門 1 9

來自 hzwer 的九道非常經典的分塊題。目前可以在 loj 上提交 here 1.給出乙個長度為 n 的數列,支援區間加,單點查值。將序列分成長度為 s 的 lceil frac rceil 塊。設我們的操作區間為 l,r 稱被其完全包含的塊為整塊,否則為散塊。可以發現整塊的數量不超過 lceil...

數列分塊入門1 9 loj6277 6285

hzwer的講解 給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,單點查值。include include include using namespace std int n,a 50005 opt,uu,vv,ww,tag 305 blc,bel 50005 void add int...

數列分塊6

題意 給出乙個長為n的數列,以及n個操作,操作涉及單點插入,單點詢問,資料隨機生成。思路 先說隨機資料的情況 之前提到過,如果我們塊內用陣列以外的資料結構,能夠支援其它不一樣的操作,比如此題每塊內可以放乙個動態的陣列,每次插入時先找到位置所在的塊,再暴力插入,把塊內的其它元素直接向後移動一位,當然用...