树状数组
MYBHB_mio
这个作者很懒,什么都没留下…
展开
-
【逆序对】【cofun1917】奇数码问题
【cofun1917】奇数码问题Description 你一定玩过八数码游戏,它实际上是在一个33的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这33的网格中。 例如: 5 2 8 1 3 _ 4 6 7 在游戏过程中,可以把空格与其上、下、左、右四个方向之一的数字交换(如果存在)。 例如在上例中,空格可与左、上、下面的数字交换,分别变成: 5 2 8 5 2 _ 5原创 2017-11-01 20:03:08 · 705 阅读 · 0 评论 -
逆序对的两种算法【树状数组 / 归并排序】
对于数组A[1…n],求逆序对对数。 可根据数据范围离散化。 以下算法时间复杂度:O(n * log n)。 逆序对对数最大为n*(n-1)/2,结果经常要用long long保存。 树状数组算法 逐一读入a[i]。 利用树状数组统计比a[i]小的数个数s,逆序对个数加上i - 1 - s。 把a[i]计入树状数组,即结点i加1。 代码: #include<bits/stdc++.h> using原创 2017-11-01 20:01:51 · 415 阅读 · 0 评论 -
树状数组(二叉索引树)
树状数组(二叉索引树BIT) 针对动态连续和查询问题。 对于数组{A1,A2,A3,…An},有操作如下: Add(x, d):让Ax增加d;Query(L, R):计算A中第L个数到第R个数的和(S[R] - S[L - 1])。 lowbit(x):x的二进制表达式中最右边1所对应的值。 -x:x按位取反,末尾加1。(补码表示) → lowbit(x) = x & -x ; 黑原创 2017-11-01 19:00:23 · 332 阅读 · 0 评论