題意:給你乙個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...