求 debug: 归并排序求逆序对。
  • 板块题目总版
  • 楼主DesignDigits
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/12 10:02
  • 上次更新2023/11/4 10:57:37
查看原帖
求 debug: 归并排序求逆序对。
125773
DesignDigits楼主2021/8/12 10:02

我写了一个函数,对一个 pair<int, int> 数组 a 中每个 pairsecond 进行排序并求逆序对。

数据是保证每个 second 互不相同的。

这个函数导致 WA,大佬能不能帮忙看看,是哪儿有问题。(本人以前也写过几次归并,都过了,不知道为什么现在就过不去)

int mergeSortAndGetNRvsPair(pair<int, int> *a, int l){
	static int tmp[100000]; // 排序的结果暂存数组
	if(l<=1){
		return 0;
	}
	int res = mergeSortAndGetNRvsPair(a, l>>1) +
	  mergeSortAndGetNRvsPair(a+(l>>1), l+1>>1); // 分成长度为 l>>1, l+1>>1 (也可以理解成 l/2, l-l/2) 的两段,res 为逆序对个数
	int tmpL=0; // 已经放入结果的数的个数
	for(int ltTag=0, rtTag=l>>1; ltTag<l>>1 || rtTag<l; ){ // 归并排序的两个遍历的变量
		if(ltTag<l>>1 && (rtTag>=l || a[ltTag].second<a[rtTag].second)){
			tmp[tmpL++]=a[ltTag++].second;
		}else{
			tmp[tmpL++]=a[rtTag++].second;
			res += (l>>1)-ltTag; // 更新逆序对数量
		}
	}
	for(int i=0; i<l; ++i){
		a[i].second = tmp[i]; // 把暂存结果存回原数组
	}
	return res;
}
2021/8/12 10:02
加载中...