Loj 6281 數列分塊入門 5

2022-03-02 18:32:41 字數 727 閱讀 8744

思路:因為是向下取整開方,那麼其實每個數最多被開個個幾次就會變成0或者1了,更新的時候我們可以將中間的塊標記下是否全部變成了0或者1,如果全變了就不處理

實現**:

#includeusing

namespace

std;

#define ll long long

const

int m = 1e5 + 10

;vector

v[m];

inta[m],block,n;

intsum[m];

inttag[m];

intbl[m];

void reset(intx)}

void update(int l,int

r)

if(bl[l] !=bl[r])

}for(int i = bl[l] + 1;i <= bl[r] - 1;i ++)

}int query(int l,int

r)

for(int i = bl[l] + 1;i <= bl[r]-1;i ++)

ans +=sum[i];

return

ans;

}int

main()

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

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

return0;

}

LOJ 6281 數列分塊入門 5

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

LOJ 6281 數列分塊入門 5

記憶體限制 256 mib時間限制 500 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 上傳者 hzwer 提交提交記錄 統計討論 1測試資料 題目描述 給出乙個長為 nnn 的數列,以及 nnn 個操作,操作涉及區間開方,區間求和。輸入格式 第一行輸入乙個數字 nnn。第二行輸入 nnn ...

6281 數列分塊入門 5

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