
树状数组
winhcc
这个作者很懒,什么都没留下…
展开
-
hdu 1556
居然在别人的树状数组里面看到了这道题。这是啥子的树状数组偶,明明是差分好吧#include <cstdio>#include <cstring>using namespace std;const int N = 100010;int n,a,b,t[N];int main(){ while(scanf("%d",&n)&&n){ ...原创 2019-03-29 21:35:38 · 185 阅读 · 0 评论 -
poj 2352
啊,这鬼畜的输入。树状数组,排序后x坐标是从小到大的,所以维护y就行了。先查询,后更新。要注意0,lowbit(0) = 0,就自然而然的TLE了#include <cstdio>#include <cstring>#include <algorithm>#define f first#define s secondusing namespace...原创 2019-03-30 00:15:44 · 113 阅读 · 0 评论 -
hdu 1394
动态逆序对问题,当一个开头的数字变成结尾的元素,如果每次都分别求一边逆序对,复杂度就是n^2 logn ,肯定tle分析后可知,设当前数字为k,由于序列是0~ n-1 的排列,则k对于逆序数的贡献是k,当k移动到末尾,对逆序对的贡献是n-1-k,又失去了在开头的贡献,所以要减去k.树状数组实现:#include <cstdio>#include <cstring>...原创 2019-04-07 00:39:22 · 163 阅读 · 0 评论 -
poj 2299
求逆序对,可用树状数组求,为什么可以呢?已知 ci = ai-lowbit(i) + … + ai则可以用 aj 表示 数字j之前出现的次数 cj就表示一段数字出现的次数之和当处理第k个数字是,用sum(val[k]) 求出大于等于val[k] 的数字出现的次数,则k - sum[k] 就是 前k个数字对第k个数字产生的逆序对数量。记住用long long ,int 这种东西真的是说爆就爆...原创 2019-03-28 20:21:36 · 290 阅读 · 0 评论