Run ID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
3948653 | slxg | 3321 | Accepted | 9300K | 375MS | Pascal | 1834B | 2008-08-22 16:32:42 |
3948639 | slxg | 3321 | Accepted | 9300K | 407MS | Pascal | 1821B | 2008-08-22 16:30:20 |
3948556 | slxg | 3321 | Wrong Answer | Pascal | 1816B | 2008-08-22 16:18:51 |
這道題的轉化比較巧妙~
利用的是樹的後序遍歷~
後序遍歷時間……
把樹的查詢轉換成序列的查詢~
用s[i]和t[i]分別表是i及其子樹在後序遍歷序列中的開頭位置和結束位置~
修改時 change(t[i])~注意阿~不是 change(i)阿~ (WA了1次)
查詢時 sum(t[i])-sum(s[i]-1)
然後利用樹狀數組就可以輕鬆過了~
還有把lowbit加上inline可以節省不少時間,其他的就不用了
如果把樹轉換成序列能保持有序性,且更容易搞,那就轉化吧!!!!!!!