poj3321 樹狀陣列 Apple Tree

2021-10-09 06:57:13 字數 1385 閱讀 8457

description

input

output

for every inquiry, output the correspond answer per line.

sample input

3

1 21 3

3q 1

c 2q 1

sample output
3

2

source

poj monthly–2007.08.05, huang, jinsong

題目大意

解題思路

先做一遍dfs序

於是問題轉換成

那麼加入樹狀陣列就很好解決了呀

code

#include 

#include

using namespace std;

struct dt

a[100100];

struct demo

f[100100];

100100

],num[

100100

],head[

100100];

char c;

void

add(int x, int y)

void

dfs(int x)

//計算dfs序

int lowbit

(int x)

void

change

(int x, int s)

//更改蘋果數

int sum

(int x)

int main()

dfs(1)

;for

(int i =

1; i <= n; i++

)scanf

("%d"

,&m)

;for

(int i =

1; i <= m; i++

)else

printf

("%d\n"

,sum

(f[k]

.right)

-sum

(f[k]

.left-1)

);}}

POJ 3321 樹狀陣列

題意 給定一棵樹,某些節點上有蘋果,多次詢問各子樹上的節點數,並且在詢問的中途隨時可能新增和刪除蘋果。分析 dfs遍歷樹的同時,對每個點標註時間,每個點有乙個開始時間和乙個結束時間,把這兩個時間當做下標,該點的蘋果個數 1或0 填入陣列的兩個對應位。子樹中結點的時間段一定是根節點時間段的子段,所以求...

poj 3321 樹狀陣列

首先對數進行dfs一下,前序優先遍歷,這樣做的目的是令節點i的子節點的編號組成的集合是一段連續的數,這樣在查詢的時候就能夠用樹狀陣列來查詢連續的區間的和 ac 如下 include include include include using namespace std const int max n...

poj 3321 樹狀陣列 dfs對映

思路 將乙個樹對映成樹狀陣列,用dfs 對圖中的蘋果樹進行遍歷 dfs遍歷順序i13 452start i 12 345end i 54 345 start 就是dfs遍歷的順序,也可以理解為dfs呼叫時入棧的時間,同理,end表示dfs呼叫結束時即退棧的時間。這樣求1號樹叉上的蘋果總數就是求從1到...