基础算法 788.逆序对的数量
2022/4/15 12:12:51
本文主要是介绍基础算法 788.逆序对的数量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<iostream> using namespace std; const int N = 1e6+10; int n; long long cnt=0; int q[N],tmp[N]; void count(int q[],int l,int r) { if(l>=r)return ; int mid = (l+r)>>1; count(q,l,mid); count(q,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++]; //cnt++; } else { tmp[k++]=q[j++]; cnt += (mid - i + 1); //这里是重点 } } while(i<=mid) tmp[k++]=q[i++]; while(j<=r) tmp[k++]=q[j++]; for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j]; } int main() { cin>>n; for(int i=0;i<n;i++) cin>>q[i]; count(q,0,n-1); cout<<cnt; return 0; }
数组a中的i ~ mid的数组是递增数组, 触发条件是a[i] > a[j],所以i~mid中的数字都比当前a[j]大,所以左边i ~ mid的数组中有 mid - i + 1个数比a[j] 大。
这篇关于基础算法 788.逆序对的数量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南