你有n個整數,a1,a2,…,an。 你需要處理兩種操作。 一種操作是在給定間隔中為每個數字新增一些給定數字。 另一種是要求給定間隔中的數字總和。
第一行包含兩個數字n和q.1≤n,q≤100000。
第二行包含n個數字,a1,a2,…,an的初始值。 -1000000000≤ai≤1000000000。
接下來的q行中的每一行代表乙個操作。
「c a b c」表示將c新增到aa,aa + 1,…,ab中的每乙個。 -10000≤c≤10000。
「q a b」表示查詢aa,aa + 1,…,ab的總和。
你需要回到q個詢問,每個詢問一行。
10 5
1 2 3 4 5 6 7 8 9 10
q 4 4
q 1 10
q 2 4
c 3 6 3
q 2 4
樣例輸出455
915總和可能超過32位整數的範圍。
#include
#define ll long long
using
namespace std;
const
int n=
100010
;int n,m;
int w[n]
;struct nodet[
4*n]
;void
pushup
(int u)
void
pushdown
(int u)
}void
build
(int u,
int l,
int r)
else
}void
modify
(int u,
int l,
int r,
int d)
else
}ll query
(int u,
int l,
int r)
intmain()
else
printf
("%lld\n"
,query(1
,l,r));
}return0;
}
線段樹的單點修改加區間修改
const int maxn 1e6 5 int a maxn 存每個數的值 struct node tree maxn 4 void pushup int id 區間合併 void pushdown 區間下放,進行區間修改的時候用到 void build int id,int ll,int rr ...
線段樹(三) 區間修改(乙個標記且有順序)
快速操作序列 給出乙個有 n 個元素的陣列 a 1,a 2,a n 設計乙個資料結構支援以下兩種操作 不難想到把 set 操作進行分解,記錄在結點中,但很快就會發現乙個問題,add操作的時間順序不會影響結果,但set會。比如先執行 add 1,4,1 再執行 add 2,3,2 等價於先執行 add...
線段樹 乙個簡單的整數問題(未完)
你有n個整數,a1,a2,an。你需要處理兩種操作。一種操作是在給定間隔中為每個數字新增一些給定數字。另一種是要求給定間隔中的數字總和。第一行包含兩個數字n和q.1 n,q 100000。第二行包含n個數字,a1,a2,an的初始值。1000000000 ai 1000000000。接下來的q行中的...