首页 > 其他分享 >788. 逆序对的数量

788. 逆序对的数量

时间:2022-10-08 12:22:39浏览次数:85  
标签:sort int LL 788 mid merge 数量 逆序

https://www.acwing.com/problem/content/description/790/

y总的思路
我的理解
究其分治,底层原理,大概是:
利用归并排序的分治特点,一次分两组
最终分成单位为1,即只有1个数的组
即第1,第2中情况都被分成了第三种情况
由于只有1个数.即每个序列都有序,可以很轻松算出是否为逆序对,回溯求和即可
从高处看:
对于任意两个组L,R,,相对于R组j元素来说,它在L组中逆序对的数量为mid-i+1
即可知一组的逆序对数量,求和所有组的逆序对数量即可
或者可以看看这篇题解:https://www.acwing.com/solution/content/17978/

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
typedef long long LL;
int n;
int q[N],tmp[N];
LL merge_sort(int l,int r)
{
	if(l >= r) return 0;
	LL mid=l+r >> 1;
	LL res = merge_sort(l,mid) + merge_sort(mid+1,r);
	int k=0,i=l,j=mid+1;
	while(i <= mid && j <= r)
		if(q[i] <= q[j]) tmp[k++]=q[i++];
		else
		{
			tmp[k++]=q[j++];
			res+=mid-i+1;
		}
	while(i <= mid) tmp[k++]=q[i++];
	while(j <= r)tmp[k++]=q[j++];
	for(int i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
	return res; 
}
int main()
{
	cin >> n;
	for(int i=0;i<n;i++)cin >> q[i];
	cout << merge_sort(0,n-1) << endl;
	return 0;	
}

 

标签:sort,int,LL,788,mid,merge,数量,逆序
From: https://www.cnblogs.com/lxl-233/p/16768553.html

相关文章

  • nlog配置文件配置文件大小、输出路径、文件保留数量
    <?xmlversion="1.0"encoding="utf-8"?><nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • VMWare中的处理器数量和每个处理器的内核数量概念及查询方法
    1、VMWare中的处理器数量和每个处理器的内核数量概念及查询方法https://www.ngui.cc/el/1256722.html?action=onClick如何查看Window或Linux的CPU、核心数、线程数https......
  • 树状数组-归并排序-逆序对-2426. 满足不等式的数对数目
    问题描述给你两个下标从0 开始的整数数组 nums1和 nums2 ,两个数组的大小都为 n ,同时给你一个整数 diff ,统计满足以下条件的 数对 (i,j) :0<=i<j<=n-......
  • 【Golang】go语言中如何控制goroutine的数量
    一、现状在Go语言中,goroutine的创建成本很低,调度效率高,Go语言在设计时就是按以数万个goroutine为规范进行设计的,数十万个并不意外,但是goroutine在内存占用方面确实具有有......
  • 01背包&完全背包二维写法的对比,进而理解一维优化后的正逆序
    01背包题解完全背包题解二维写法时两种背包问题核心代码的区别:可以看出,01背包用的是上一层的数据,完全背包用的是当前层的数据所以优化为一维时,01背包需逆序for......
  • 计算五位数的逆序数
    #include<stdio.h>intmain(){longa;//输入一位五位数 intg,h,m,k,l;//依次获取各位数值 intn; //inti,j;//迭代值 intt=0;//逆序数 //intb;*/ printf("计......
  • 用递归函数和栈操作逆序栈
    用递归函数和栈操作逆序栈作者:Grey原文地址:博客园:用递归函数和栈操作逆序栈CSDN:用递归函数和栈操作逆序栈题目描述请设计一个算法实现逆序栈的操作,但是只能用递归函......
  • 整数的逆序
    思路:首先定义三个变量abc,让用户输入一个整数存放在变量a中     然后让a对10取余数得到其个位数,将这个个位数赋值给b     每次的a/10使得a每次丢到其各......
  • 聚类算法中聚类数量的确定方法
    聚类算法中聚类数量的确定方法聚类算法是对实体进行分组归类的有效方法,也是有利于降低人力工作量的有效手段,例如先用AI聚类方法对实体数据进行聚类分组,再由人工介入指认,能......
  • Kubernetes小技巧关于节点pod ip node数量规划
    背景:最近就想体验各种多集群互联(基于wireguard),然后就深感网络划分的重要性,开始网络设计的杂七乱八的。想互联了都各种问题了,网络重叠了怎么办?集群扩容IP资源不够了杂整?还有......