树状数组
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 · 154 阅读 · 0 评论 -
poj 2352
啊,这鬼畜的输入。 树状数组,排序后x坐标是从小到大的,所以维护y就行了。先查询,后更新。 要注意0,lowbit(0) = 0,就自然而然的TLE了 #include <cstdio> #include <cstring> #include <algorithm> #define f first #define s second using namespace...原创 2019-03-30 00:15:44 · 85 阅读 · 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 · 123 阅读 · 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 · 260 阅读 · 0 评论