zhrt的資料結構課
這個題目我覺得是乙個有一點點思維的dfs+線段樹
雖然說看起來可以用樹鏈剖分寫,但是這個題目時間卡了樹剖
因為之前用樹剖一直在寫這個,所以一直想的是區間更新,想dfs+線段樹,有點點沒想明白
後來才知道可以把這個區間更新轉化成單點更新,就是查乙個結點的子樹,如果子樹有可以到根節點的,那麼這個結點肯定也可以到根節點。
#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 4e5 + 10;
int sum[maxn * 4];
void push_up(int id)
void build(int id,int l,int r)
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
push_up(id);
}void update(int id,int l,int r,int pos,int val)
int mid = (l + r) >> 1;
if (pos <= mid) update(id << 1, l, mid, pos, val);
else update(id << 1 | 1, mid + 1, r, pos, val);
push_up(id);
}int query(int id,int l,int r,int x,int y)
int el[maxn], er[maxn], tot = 0, head[maxn], cnt;
struct node
}ex[maxn];
void init()
void add(int u,int v)
void dfs(int u,int pre)
er[u] = tot;
// printf("el[%d]=%d er[%d]=%d\n", u, el[u], u, er[u]);
}int main()
dfs(1, -1);
while(m--)
}}}
資料結構 線段樹
啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...
資料結構 線段樹
一 目標 1.如何快速的查詢出下列陣列arr 2,5 的和 2。以及更新arr 4 為6。用普通的方法查詢的複雜度為o n 更新的複雜度為o 1 這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。二 內容 如何建立,查詢,更新線段樹。public class qurqpd int tree...
資料結構 線段樹
線段樹是一顆平衡的二叉搜尋樹,他以空間換區時間,讓線性查詢加速log級別的查詢,用到的演算法主要是二分搜尋和遞迴。例如 有陣列data 我有乙個需求,我需要頻繁的查詢區間i j的sum和。這裡先給出兩個解決方案 如果使用最普通的演算法遍歷,那麼查詢和更新的複雜度為o n 當然你還可以使用動態規劃,定...