【PKU 3321】Apple Tree(树状数组)

来源:互联网 发布:股票记录软件 编辑:程序博客网 时间:2024/05/26 09:57

【题目描述】:

就是说有一棵二叉树,每个节点上面有一个权值,这个权值只可能是0或者是1。首先给你这棵树,然后进行M次操作:

C X 表示将编号为x的节点的权值改变(就是1-->0,0-->1)

Q X表示查询以X为根的子树上权值的和。

(N<=100000,M<=100000)

【题目分析】:

这个题数据量一看就是奇大的那一种,肯定必须要用Nlogn或是N的强悍算法~然后我们发现这个题可以这样想:对于DFS的时间戳来说,我记录入栈的时间,和出栈的时间,这中间出栈的节点一定是这个子树上的节点,所以我们会发现,实际上是维护一个连续段上的和的问题。可以用的方法有线段树还有树状数组。

我用的是树状数组,程序分为3步:

STEP1 读入,建树

STEP2 DFS(注意:入栈的时间是当前的time+1,而这个time只在有东西出栈的时候才往上加[想一想为什么呢~])

STEP3 利用树状数组维护性质和完成询问。

【代码】:

原创粉丝点击