数据结构实验之排序五:归并求逆序数

本文介绍了一种使用归并排序算法计算数列逆序数的方法。逆序数是指在一个数列中,若存在ai>aj且i<j,则称(ai, aj)为逆序对。文章通过具体的代码实现展示了如何利用归并排序的思想,在排序的同时统计逆序对的数量。

数据结构实验之排序五:归并求逆序数

Time Limit: 40MS  Memory Limit: 65536KB
Problem Description

对于数列a1,a2,a3…中的任意两个数ai,aj (i < j),如果ai > aj,那么我们就说这两个数构成了一个逆序对;在一个数列中逆序对的总数称之为逆序数,如数列 1 6 3 7 2 4 9中,(6,4)是一个逆序对,同样还有(3,2),(7,4),(6,2),(6,3)等等,你的任务是对给定的数列求出数列的逆序数。

Input

输入数据N(N <= 100000)表示数列中元素的个数,随后输入N个正整数,数字间以空格间隔。

 

Output

输出逆序数。

Example Input
10
10 9 8 7 6 5 4 3 2 1
Example Output
45
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[150000];
int b[150000];
long long sum;
void sort(int l,int lr,int rl,int r)
{
    int i=l,j=rl;
    int k=0;
    while(i<=lr&&j<=r)
    {
        if(a[i]<=a[j])
        b[k++]=a[i++];
        else
        {
            sum+=lr-i+1;//在已经排好序的递归数组中,从小到大排序的,i之后到lr的都比j要大
            b[k++]=a[j++];
        }
    }
    while(i<=lr)
    {
        b[k++]=a[i++];
    }
    while(j<=r)
    {
        b[k++]=a[j++];
    }
    for(i=0;i<k;i++)
    {
        a[i+l]=b[i];//将数组从小到大更新,排序。  
    }
    //for(i=l;i<=r;i++)
    //{
      //  a[i]=b[i-l];
   // }
}
void msort(int l,int r)
{
    if(l<r)
    {
        int mid=(l+r)/2;
        msort(l,mid);
        msort(mid+1,r);
        sort(l,mid,mid+1,r);
    }
}
int main()
{
    int n;
    int i;
    sum=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    msort(0,n-1);
  
    printf("%lld\n",sum);
}

Hint


已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 常见问题解答 网页打开速度慢或者打不开网页? 受到多种因素的影响,对于非会员用户我们无法提供最优质的服务。 如果您希望得到最棒的体验,请至大会员页面("右上角菜单 → 大会员")根据说明操作。 请注意:受制于国际网络的诸多不确定性,我们无法对任何服务的可靠性做出任何保证。 如果出现了网络连接相关的问题,我们建议您先等待一段时间,之后再重试。 如果您在重试后发现问题仍然存在,请联系我们,并说明网络问题持续的时间。 图片下载后无法找到? 打开"右上角菜单 → 更多 → 修改下载路径",在弹出的对话框中可以看到当前图片的保存路径。 此外,由于网络因素,在保存图片之后,等待屏幕下方出现"已保存到..."后,才能在本地找到图片。 如何更改图片保存的目录? 请参见"右上角菜单 → 更多 → 修改下载路径"。 翻页不方便? 在点进某个图片后,通过在图片上向左或向右滑动,即可翻页查看下一个作品。 如何保存原图/导出动图? 长按图片/动图,在弹出的菜单中选择保存/导出即可。 输入账号密码后出现"进行人机身份验证"? 此为pixiv登陆时的验证码,请按照要点击方框或图片。 在pxvr中注册pixiv账号后,收到验证邮件,无法访问邮件中的验证链接? 请复制邮件中的链接,打开pxvr中的"右上角菜单 → 输入地址"进行访问。 能否自动将页面内容翻译为汉语? 很抱歉,pxvr暂不提供语言翻译服务。 图片下载类型是否可以选择? 能否批量下载/批量管理下载? 已支持批量下载多图作品中的所有原图:找到一个多图作品,进入详情页面后,点击图片进入多图浏览模式,长按任意一张图片即可看到批量下载选项。 关于上述其他功能,我们...
考虑局部遮阴的光伏PSO-MPPT控制模型(Simulink仿真实现)内容概要:本文介绍了基于Simulink仿真实现的考虑局部遮阴的光伏PSO-MPPT控制模型,旨在通过粒子群优化(PSO)算法解决光伏发电系统在局部阴影条件下最大功率点跟踪(MPPT)的效率问题。文档不仅提供了该模型的技术实现方法,还列举了大量相关的MATLAB/Simulink仿真资源,涵盖电力系统、智能优化算法、机器学习、路径规划、信号处理等多个科研方向,适用于复现高水平期刊论文和开展创新性研究。文中强调科研需逻辑缜密、善于借力,并提倡结合实际仿真与理论分析以提升研究深度。 适合人群:具备一定电力电子、自动控制或新能源背景,熟悉MATLAB/Simulink环境,从事光伏系统优化、智能算法应用或相关领域研究的研发人员及硕博研究生。 使用场景及目标:①研究局部遮阴下光伏系统MPPT控制策略的性能提升;②利用PSO等智能优化算法解决非线性、多峰值优化问题;③复现SCI/EI级别论文中的MPPT控制模型;④开展光伏系统建模与仿真教学或项目开发。 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码与模型文件,按照目录顺序逐步学习,重点理解PSO算法在MPPT中的应用机制,并通过修改参数、对比实验等方式深入掌握仿真细节,提升工程实践与科研创新能力。
内容概要:本文档是美国国家标准与技术研究院(NIST)发布的特殊出版物800-38B,题为《分组密码运行模式建议:用于认证的CMAC模式》。该文档详细规范了一种基于对称密钥分组密码的消息认证码(MAC)算法——CMAC(Cipher-based Message Authentication Code)。CMAC用于确保数据的真实性与完整性,适用于需要高安全性的信息系统。文档介绍了CMAC的工作机制,包括子密钥生成、MAC生成与验证的具体步骤,并提供了相关的数学符号、定义和操作说明。此外,还讨论了MAC长度选择、密钥使用范围、重放攻击防护等安全性相关议题,并给出了实际应用中的参数建议和限制条件。 适合人群:从事信息安全、密码学研究或系统开发的专业技术人员,尤其是涉及加密模块设计、合规性评估或联邦信息系统安全实施的工程师和研究人员。 使用场景及目标:①为实现符合NIST标准的认证机制提供权威指导;②支持密码模块验证计划(CMVP)下的合规性测试;③帮助开发者正确实现CMAC算法并合理配置MAC长度与密钥使用上限,以抵御猜测攻击和碰撞攻击。 阅读建议:此文档属于技术规范类文件,应结合FIPS 197(AES)、SP 800-67等配套标准一同参考,重点关注第6节算法流程及附录中的安全参数建议,在实际部署时需严格遵循文中“shall”规定的强制性要
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值