LibreOJ 6280 數列分塊入門 4

2021-09-20 07:06:19 字數 1501 閱讀 4019

題意:給你乙個n個整數的序列,讓你進行兩種操作;

分析:這裡用分塊;

這題直接做就行了,要先預處理下各塊的元素和,對它進行維護;修改的時候,對區間的不完整塊進行暴力,若是完整塊,就加到標記上;對於查詢,不完整塊暴力求和,完整塊,拿標記乘以區間長度並加上塊的元素和;

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define inf 0x7f7f7f7f

#define maxn 50050

#define n 100100

#define p 2

typedef

long

long ll;

typedef

struct

edge;

edge e[2]

;int cnt, head[1]

;inline

void

add(

int u,

int v,

int w)

inline

void

write

(int x)

inline

intread()

while

(c >=

'0'&& c <=

'9')

return x * f;

}int opt, l, r, c, sz, n, pos[maxn]

;ll mark[maxn]

, a[maxn]

, sum[maxn]

;vector vec[

250]

;void

update

(int l,

int r,

int val)

if(pl != pr)

}for

(int i = pl +

1; i < pr; i++)}

ll query

(int l,

int r,

int val)

if(pl != pr)

}for

(int i = pl +

1; i < pr; i++

) res +

= sum[i]

;return res %

(val +1)

;}intmain()

for(

int i =

1; i <= n; i++

)else

}return0;

}

我們堅持一件事情,並不是因為這樣做了會有效果,而是堅信,這樣做是對的。

——哈維爾

LOJ 6280 數列分塊入門 4

給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,區間求和。第一行輸入乙個數字 n。第二行輸入 n 個數字,第 i 個數字為 a i 以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 mathrm l r c 以空格隔開。若 mathrm 0 表示將位於 l,r 的之間的數字都加 c...

loj 6280 數列分塊入門 4

題目 傳送門 簡要題意 給出乙個長為 n的數列,以及 n個操作,操作涉及區間加法,區間求和。題解 第一反應.線段樹.然後再去想分塊 有點水.也是運用lazy的思想啊,先存一下每一塊的和,對於頭尾就可以直接加 記得更新分塊和 然後中間的塊直接把和加上去,隨便檢查一下細節就搞定了。1 include2 ...

LibreOJ 6279 數列分塊入門 3

題意 給你乙個n nn個整數的序列a aa,讓你進行兩種操作 分析 這裡用分塊 與第二題相似,查詢前驅我們同樣需要排序,不過這裡可能會想到這樣的情況,即對於查詢x xx前驅,如果查詢區間內有多個x,這樣顯然直接二分是不行的,即我們需要去重,或者統計區間內每個元素的個數,這裡便用到了set setse...