數列分塊入門 5 總結

2022-05-17 01:49:18 字數 1295 閱讀 9594

這題我得著重給一給資料範圍,嗯嗯

哈哈,我們發現a[i]最大是231-1。

好,我們開開方先:

2147483647

46340(取整的

2151431

1…我們再試幾個數,發現最終會變成0或1,然後就不會在變了。

所以,它最多會開方5次,然後便相當於不變了。

這樣子,我們一開始全部暴力改。

每當乙個塊的全部a都變成了0或1的話,就標記一下,表示下次不用再搞了。

對於每個塊,我們用個d來存它的和。

求答案的話便和以前那些差不多,

分成三塊。

左邊凸出來的,右邊凸出來的,以及中間的完整的塊。

嘻嘻,兩邊暴力,中間就用到d即可。

上標:

#include

#include

#include

using namespace std;

int a[

50010

],d[

321]

,n,b[

321]

;int opt,l,r,c,st;

int bl[

50010

],le[

321]

,ri[

321]

;bool check[

321]

;inline

intread()

void

solve

(int x)

}void

open_square

(int l,

int r)

for(

int i=bl[l]+1

;i<=bl[r]-1

;i++

)solve

(i);

}int

query

(int l,

int r)

intmain()

for(

int i=

1;i<=n;i++

)return0;

}

6281 數列分塊入門 5

題目鏈結 用check來判斷整個塊是0是1,如果是0或者是1,就不用再對這個塊裡的元素開方了。對乙個數不斷開方一定會縮小到0或者1。第一行輸入乙個數字 n。第二行輸入 n 個數字,第 i 個數字為 ai,以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 opt l r c,以空格隔開。若 opt...

數列分塊入門 8 總結

這題我們只需設個check i 表示第i塊是否都為乙個數,b i 表示第i塊變成的數。然後暴力搞就可以了。至於為什麼,我們看看hzwer大佬 黃學長 的解釋吧 d a l a o 上標 include include include define n 100010 using namespace s...

LOJ 6281 數列分塊入門 5

原題位址 題意 給出乙個長為 n 的數列 a,以及 n 個操作,操作涉及區間開方,區間求和。思路 對於整塊的開方操作不像加法一樣可以疊加,開方必須要對每乙個數進行操作,這樣才能進行區間加法運算,但是這樣的話就等於暴力計算每乙個數字,複雜度是n2 n 2,這樣無疑是超時的。於是我們考慮開方的性質,可以...