分塊基礎(簡單易懂)

2021-10-24 14:17:41 字數 1436 閱讀 5541

分塊

分塊想當於優雅的暴力,主要是求區間的問題。

分塊即將一段數分成很多塊,

我們通常以x=sqrt(n)來表示乙個塊的大小

num=ceil(n ×

\times

× 1.0/x) 來表示塊的個數

分塊主要需要的就是3個陣列,

pos[i]是來表示第i個數所在的塊

l[i]表示第i個塊的左端點

r[i]表示第i個塊的右端點

比如 下面這題

我們得再創乙個ans[i]陣列,用來表示我們在第i個塊上加的數。

但這就誕生了乙個問題,如果加的區間所包括的第i個塊不完整的話,我們能不能在ans[i]上c,

答案是不能的。

對於不完整的塊我們應該暴力解決,在a陣列,即原陣列上加c

對於完整的塊我們只需要在ans陣列上加c即可

所以最終得到的結果即為第i個數的大小為a[i]+ans[pos[i]]

題目描述

給出乙個長為 n 的數列,以及n 個操作,操作涉及區間加法,單點查值。

輸入格式

第一行輸入乙個數字 。第二行輸入n個數字,第i個數字為a[i],以空格隔開。

接下來輸入n行詢問,每行輸入四個數字 opt 、l 、r 、c 以空格隔開,

opt=0表示將位於[l,r] 的之間的數字都加c 。

opt=1,表示詢問 a[r] 的值

輸出格式

對於每次詢問,輸出一行乙個數字表示答案。

樣例樣例輸入

4

1 2 2 3

0 1 3 1

1 0 1 0

0 1 2 2

1 0 2 0

樣例輸出
2

5

#includeusing namespace std;

int l[2005],r[2005] ,pos[50005],a[50005],ans[50005];

void add(int ll,int rr,int v)

}else

r[num]=n;

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

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

else

} return 0;

}

javaWeb簡單易懂

武松 瀏覽器。酒館 伺服器。店小二 廚師 servlet或者jsp。來三碗好酒!瀏覽器向伺服器發出http請求。店小二上酒 伺服器的響應。武松從進店到離開 乙個http對話。我們可以看到,web互動的最基本單位為http請求 武松點菜 每個使用者從進入 到離開 這段過程稱為乙個http會話 武松進店...

簡單易懂BFS

廣度優先搜尋,又稱寬度優先搜尋,簡稱bfs bfsbfsbf sbfs bfs從起點開始,優先搜尋離起點最近的點,然後由這個最近的點擴充套件其他稍近的點,這樣一層一層的擴充套件,就像水波擴散一樣。b fs bfsbf s需要借助佇列來實現 根據該思路可以得出乙個簡單的 框架 void bfs 起始點...

KMP 簡單易懂

解決問題 str1中是否有某個子串等於str2,有則返回在str1中得到起始位置。舉例 abcabck 和 abcabct 此時返回 1 abcabcabct 和 abcabct 此時返回3 常規思路 用str2去比較str1從0開始的每一位,比較結束若有str2返回此時比較的起始位置,否則返回 1...