2009年武森论文笔记 (BGM:Megumeru)

例1:Matrix
对于这种求某个数MOD 2值并且修改区间类的问题可以使用树状数组配合在区间头和区间尾+1处修改得到解决。

树状数组:
LOWBIT(A)=(A&(-A))
对于编号为X的点来说,它记录了2^k个元素(k是末尾0个数)。
对于X-LOWBIT(X)来说,实际上是去掉了2进制X的最后一个1,因为X中最多LOG(X)个1,所以可证明复杂度。

SUDOKU:
2进制压位搜索,他说有很高小绿!
不过DANCING LINKS更快!

最远哈密顿距离:
看了很久才懂。二维情况是:
对于两个点A(x1,y1),B(x2,y2)(论文里标号很奇怪我给改回来)。因为是绝对值,所以|x1-x2|+|y1-y2|就是
(x1-x2)+(y1-y2)
-(x1-x2)+(y1-y2)
(x1-x2)-(y1-y2)
-(x1-x2)-(y1-y2)
必然是这4个式子中MAX的那个。那么最后答案就是所有这种式子中最大的那个。
注意到对于每个相对应的x1 x2,y1 y2他们的符号总是相反的,所以可以花2^2的数组存下每个对于每个点X,Y的符号(因为变化的总是这些XYZ的符号)。那么这个就是可以用A[N][4]的数组存下,然后比如0代表+,1代表-的话,那么对于点1(x1,y1)和点2(x2,y2)他们的式子就是
A[1][0]-A[2][0]
A[1][1]-A[2][1]
A[1][2]-A[2][2]
A[1][3]-A[2][3]
然后问题就变得简单了,扫一遍,对于每个I,求出A[*][I]的最大值MAX(I)最小值MIN(I),再用MAX(I)-MIN(I)就可以得到对于I来说的最大值了。最后取个总的最大值,就是答案。可以很容易推广到多维。维数是D的话复杂度是O(N*2^D)。 好费力啊! 还输不起日文!

COW XOR:
没看懂他的,不过大概和我们的差不多。
从首位开始枚举看是否能满足1,能满足就继续,10、11一系列恶搞办法复杂度仍然是N*LOGN。

结尾:
总的来说是讲了很多比较基本的二进制用法,而且讲的都比较到位。像我这样的菜鸟不看不行啊!