有趣的分塊理論講解
給出乙個長為 n
'>n
n 的數列,以及 n
'>n
n 個操作,操作涉及區間加法,單點查值。
input
第一行輸入乙個數字 n
'>n
n。第二行輸入 n
'>n
n 個數字,第 i
'>i
i 個數字為 a
i'>ai
ai,以空格隔開。
接下來輸入 n
'>n
n 行詢問,每行輸入四個數字 opt
'>opt
opt、l
'>l
l、r'>r
r、c'>c
c,以空格隔開。
若 opt=
0'>opt=0
opt=0,表示將位於 [l,
r]'>[l,r]
[l,r] 的之間的數字都加 c
'>c
c。若 opt
=1'>opt=1
opt=1,表示詢問 a
r'>ar
ar 的值(l
'>l
l 和 c
'>c
c 忽略)。
output
對於每次詢問,輸出一行乙個數字表示答案。
example
樣例輸入
4
1 2 2 3
0 1 3 1
1 0 1 0
0 1 2 2
1 0 2 0
樣例輸出2
5
1 #include 2 #include 3 #include 4 #include5 #include 6 #include 7 #include
8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16
#define ull unsigned long long
17#define ll long long
18#define pb push_back
19#define rep(i,start,end) for(int i=start;i<=end;i++)
20#define per(i,end,start) for(int i=end;i>=start;i--)
21#define tle ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
22#define lc now<<1
23#define rc now<<1|1
24ll read()
2528
while(ch>='
0'&&ch<='9')
29return x*f;30}
31using
namespace
std;
32const
int mod = 1000000007 ; ///
998244353;
33const
int mxn = 2e5 +7;34
ll _,n,m,t,k,u,v,ans,cnt,ok,lim,len;
35int
a[mxn] ,inv[mxn],lazy[mxn],id[mxn];
36void up(int l,int r,int
c)37
44int
main()
4557 }
題解 LibreOJ6277 數列分塊入門 1
更好的閱讀體驗 portal1 libreoj 給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,單點查值。第一行輸入乙個數字 n 第二行輸入 n 個數字,第 i 個數字為 a i 以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 opt l r c 以空格隔開。若 texttt 表...
LibreOJ 6277 數列分塊入門 1 分塊
題解 感謝hzwer學長和loj讓本蒟蒻能夠找到如此合適的入門題做.這是一道非常標準的分塊模板題,本來用打標記的線段樹不知道要寫多少行,但是分塊只有這麼幾行,極其高妙.如下 include include include include include using namespace std int...
LibreOJ 6279 數列分塊入門 3
題意 給你乙個n nn個整數的序列a aa,讓你進行兩種操作 分析 這裡用分塊 與第二題相似,查詢前驅我們同樣需要排序,不過這裡可能會想到這樣的情況,即對於查詢x xx前驅,如果查詢區間內有多個x,這樣顯然直接二分是不行的,即我們需要去重,或者統計區間內每個元素的個數,這裡便用到了set setse...