這題的要求是對區間處理,查詢區間和,一看就是線段樹模板題,下面是**
#includeusing namespace std;
int pp[100001];
struct qp[2000001];
void build(int l,int r,long long x)//建樹函式
int m=(l+r)/2;
build(l,m,x<<1);
build(m+1,r,x<<1|1);
p[x].sum=p[x<<1].sum+p[x<<1|1].sum;//更新sum值
}void update(long long x,int a)//更新線段樹,其中a為陣列被改變的下標
int m=(p[x].l+p[x].r)>>1;
if(m>=a)
update(x<<1,a);
else
update(x<<1|1,a);
p[x].sum=p[x<<1].sum+p[x<<1|1].sum;
}long long search_sum(int l,int r,int l,int r,long long x)//查詢區間和,l,r為樹的區間邊界,l,r為查詢區間邊界
int main()
build(1,n,1);//建樹
for(int i=1;i<=k;i++)
}} else
}}
加法乘法線段樹模板
p2023 ahoi2009 維護序列 指定乙個區間 加上或者乘以 v,查詢乙個區間所有元素和 p 與純加法線段樹不同的是,lazy tag 的傳遞 x y v xv yv。所以每次乘法,都要把加法的lazy tag v 而加法與加法線段樹的操作一樣 include include typedef ...
演算法 線段樹
幾次的省賽,成績都不是很理想。不過這幾次省賽的給我們留下了很多寶貴的經驗 首先發現的是線段樹,每考必有 今天我們學習的就是線段樹 線段樹的功能是 1 對一段數字進行累加。2 對數字進行搜尋。3 將包含在區間int的元素x插入到樹t中。4 從線段樹中刪除元素x。5 對線段樹上的資料進行更新。今天,我們...
演算法 線段樹
線段樹的根節點是整段區間,其它結點是由區間不斷二分得到的子區間,其中葉子結點是區間的每個單獨的元素。這裡使用結構體存線段樹。struct tree tree 4 maxn 2 注意陣列大小至少要開到區間長度的四倍大這裡預設我們要求的是區間和,故結點值均為區間和。可以視情況改變結點值的含義。void ...