摘要: 逆序数的应用本题的意思:很多奶牛有暴躁值,每个奶牛都有标号,当这些奶牛交换位置时,花费的时间=这2个奶牛的各自的暴躁值之和。求共交换多少次用树状数组就可以了。求暴躁值query(n)-query(x)就行了例如:2 3 1 ,共交换2次,才能变成 1 2 3; 1用了2次,次数*当前的值+前面比该数大的数的和; 2 3 比1 大,且在1的前头,所以是 1*2+2+3=7;也就是1*2+5=7; 5是这样算的,query(n)-query(x);共3个数,6-1=5;query()里是放的数的和;#include <iostream>#include <stdio.h># 阅读全文
posted @ 2012-09-23 07:36 兴安黑熊 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 本题:求逆序数对的个数,用树状数组可求,将每个值赋成1,i-query(x)就是x这个数的逆序对数,也就是前面有几个比我大的数。#include <iostream>#include <stdio.h>#include <cstring>using namespace std;const int maxn=1008;int tree[maxn];int lowbit(int t){ return t & (-t); }void update(int pos,int val){ while(pos<=maxn) { tree[pos]+=val; 阅读全文
posted @ 2012-09-23 07:32 兴安黑熊 阅读(205) 评论(0) 推荐(0) 编辑