線段樹 線段樹練習五

2021-10-09 03:22:23 字數 1040 閱讀 7308

description

一行n個方格,開始每個格仔裡的數都是0。現在動態地提出一些問題和修改:提問的形式是求某乙個特定的子區間[a,b]中所有元素的和;修改的規則是指定某乙個格仔x,加上或者減去乙個特定的值a。現在要求你能對每個提問作出正確的回答。1≤n≤100000,提問和修改的總數可能達到100000條。

sample input

20 //方格個數

6 //有幾組操作

m 1 1 //表示修改,第乙個表示格仔位置,第二個數表示在原來的基礎上加上的數,

m 2 2

m 3 4

m 3 -5

m 6 7

c 2 6 //表示統計 ,第乙個數表示起始位置,第二個數表示結束位置

sample output
8
解題思路

線段樹每次更改數字時要把節點所得的和更改

code

#include

#include

using namespace std;

struct dt

a[400100];

int n,m,x,s;

char c;

void

build

(int root,int l,int r)

}void

add(int root,int x,int s)

int mid=

(a[root]

.l+a[root]

.r)/2;

if(x<=mid)

add(root*

2,x,s)

;else

add(root*2+

1,x,s)

; a[root]

.sum=a[root*2]

.sum+a[root*2+

1].sum;

//更新節點代表的和

}int find

(int root,int l,int r)

int main()

}

線段樹 線段樹練習題一

桌子上零散地放著若干個盒子,桌子的後方是一堵牆。如右圖所示。現在從桌子的前方射來一束平行光,把盒子的影子投射到了牆上。問影子的總寬度是多少?第一行,乙個數m代表桌面寬度 第二行,乙個數n代表盒子數量 第2到n 2行,每行兩個數代表盒子開始與結束的位置 output 乙個數,影子的總寬度 sample...

線段樹 線段樹練習題二

桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 input 第一行,乙個數m代表桌子長度 第二行,乙個數n代表盒子數量 第3到n 2行,每行兩個數,代表盒子的寬度 output 乙個數,可以看到的盒子...

線段樹 線段樹練習題三

題解。啊好煩懶得看,於是就拿線段樹練習題二改了。給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。input 第一行,兩個數n,m分...