摘要: 同POJ 2299 也是利用树状数组求逆序数的应用将x从大到小排序,若x相同,按y从大到小排序,对y建立树状数组,根据逆序数的定义,画图演算一遍就很清楚了#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 1001struct Pair{ int x, y;}p[1000010];int n, m, k;int c[MAXN];int cmp(const void *a, const void *b){ if(((Pair*)a)->x == ((Pair*)b)-& 阅读全文
posted @ 2011-04-17 14:48 L.. 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 逆序数的定义:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。 --摘自百度百科记录数列的下标,按数列的值从小到大排序,所以后面插入的值肯定比前面的大,i - getsum(c[i].pos)就可以算出在i之前还有几个比c[i]大的数,累加就是答案#include <stdio.h>#include <stdlib.h>#include <stri 阅读全文
posted @ 2011-04-17 14:29 L.. 阅读(176) 评论(0) 推荐(0) 编辑