HDU 1394 Minimum Inversion Number(线段树:单点更新,求逆序数)

【测开求职】面试题:计算机网络 详细版整理 本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。读者可以先查看上面的链接走一遍计算机网络的整体框架结构。其中,重点难点以及易混淆的知识点,笔者会用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。 阅读详情

http://acm.hdu.edu.cn/showproblem.php?pid=1394



Minimum Inversion Number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14648    Accepted Submission(s): 8942


Problem Description
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and ai > aj.

For a given sequence of numbers a1, a2, ..., an, if we move the first m >= 0 numbers to the end of the seqence, we will obtain another sequence. There are totally n such sequences as the following:

a1, a2, ..., an-1, an (where m = 0 - the initial seqence)
a2, a3, ..., an, a1 (where m = 1)
a3, a4, ..., an, a1, a2 (where m = 2)
...
an, a1, a2, ..., an-1 (where m = n-1)

You are asked to write a program to find the minimum inversion number out of the above sequences.
 

Input
The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 5000); the next line contains a permutation of the n integers from 0 to n-1.
 

Output
For each case, output the minimum inversion number on a single line.
 

Sample Input
10 1 3 6 9 0 8 5 7 4 2
 

Sample Output
16


   题意:给你0到n-1的随机序列,求出n种顺序变换后最小的逆序数。比如2341逆序数:2的逆序数为1,所以n=1,3的逆序数为1,所以n=1+1=2,4的逆序数为1,所以n=2+1=3,1的逆序数为0,所以2341的逆序数为n=3; 每次把第一位数放到后面去,这时3412的逆序数为4,4123的逆序数为4,1234的逆序数为0,所以所有情况下,序列最小的逆序数为n=0。


解题思路:这题暴力也会过的,而且很巧妙。但在这我描述下如何使用线段数求解。我看了好多博客后来才理解的。

                 利用线段树只需要计算出原始序列的逆序数,然后利用这个逆序数递推其他序列的逆序数。对于第i数 ,

                 他的逆序数等于已经插入到线段树中比它大的数的个数(query(1,a[i]+1,n-1)。

                

                  求出初始序列逆序数后: 

                           例如序列 2 0 3 1 4 5 的逆序数是3,把2放到最后边以后,比2小的数(2个)的每个数的逆序数减1,比2

                 大的数(n-a[i]-1个)的逆序数不变,而2的逆序数变为比2大的数的个数(n-a[i]-1)。根据这个结论,我们

                 就可以递推出其他序列的逆序数,进而求出最小值。



<span style="font-size:18px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=5010;
int a[maxn];
int n,ans;
struct node{
   int left,right,sum;
}t[maxn<<2];
void build(int k,int l,int r)
{
    t[k].left=l;t[k].right=r;
    t[k].sum=0;
    if(l==r) return;
    int mid=(l+r)>>1;
    build(k<<1,l,mid);
    build(k<<1|1,mid+1,r);
}
void update(int k,int val)
{
    int l=t[k].left,r=t[k].right;
    if(l==val && val==r){
        t[k].sum++;
        return;
    }
    int mid=(l+r)>>1;
    if(val<=mid) update(k<<1,val);
    else update(k<<1|1,val);
    t[k].sum=t[k<<1].sum+t[k<<1|1].sum;
}
void query(int k,int l,int r)
{
    if(l==t[k].left && r==t[k].right)
    {
        ans+=t[k].sum;
        return;
    }
    int mid=(t[k].left+t[k].right)>>1;
    if(r<=mid) query(k<<1,l,r);
    else if(l>mid) query(k<<1|1,l,r);
    else{
        query(k<<1,l,mid);
        query(k<<1|1,mid+1,r);
    }
}
int main()
{
    while(scanf("%d",&n) != EOF)
    {
        build(1,0,n);//虽然只有到n-1,但是由于后面用到a[i]+1,为防止溢出,树区间要到n
        ans=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            query(1,a[i],n-1);//计算比a[i]大的数的个数。注:这些数是包含于插入a[i]前的
            update(1,a[i]);//此时将a[i]插入
        }
        int temp=ans;
        for(int i=0;i<n-2;i++)
        {
            ans=ans-a[i]+(n-a[i]-1);
            temp=min(temp,ans);
        }
        printf("%d\n",temp);
    }
    return 0;
}
</span>






SI案例分享--PCB通孔互连新技术的应用(VeCS) 本文介绍了VeCS的物理结构和制造过程,并通过全波仿真模拟和测量,分析了VeCS的电性能,并与传统的测量方法进行了比较。结果表明,由于有一个连续的参考平面,VeCS的TDR阻抗可以很容易地控制到目标阻抗,同时可以大大减轻信道上的串扰,的确是一种性能不错的PCB互连创新设计方案。 阅读详情

相关推荐

别再手动抓波形了!用Synopsys AXI VIP的Port Monitor自动收集事务数据(附完整连接Scoreboard代码)

当标准Port Monitor无法满足需求时,Synopsys提供的callback机制就像一套精密的手术工具,允许你深入VIP内部进行定制化改造。创建自定义监控点的四步法继承基类// 其他自定义字段...endclass重写目标phase方法// 克隆事务并发送到自定义端口在env中注册callbackcustom_cb);连接自定义端口到分析组件经典应用场景地址phase特定检查数据beat级监控自定义性能统计异常注入检测。

weixin_28716181的博客 396

八数码问题求解

一个人工智能的算法作业,仅供参考!八数码问题,从是否有解到如何求解,到A*启发式算法,到变种的情况怎么分析等等,如果帮到你,能点个赞吗?有关注就更好了^_^

m0_51361529的博客 2071

高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析

本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。

weixin_29198045的博客 535

逆序数的几种求法

求一个数列的逆序数 逆序对:数列a[1],a[2],a[3]…中的任意两个数a[i],a[j] (i,如果a[i]>a[j],那么我们就说这两个数构成了一个逆序对 逆序数:一个数列中逆序对的总数 如数列 3 5 4 8 2 6 9 (5,4)是一个逆序对,同样还有(3,2),(5,2),(4,2)等等 那么如何求得一个数列的逆序数呢? 方法1:一个一个的数 最简单也是最容易想到的方法

dlengong的专栏 10万+

基于CH32X035的USB双K型热电偶温度计:硬件设计、冷端补偿与信号放大详解

本文详细介绍了基于CH32X035单片机设计USB双K型热电偶温度计的完整方案。重点解析了硬件设计中的核心挑战:如何利用精密运放GS8552-SR进行信号放大,以及采用NTC热敏电阻和查表法实现精确的冷端补偿。项目通过USB供电通信,实现了双路高精度温度测量与显示,为电子爱好者和工程师提供了实用的参考设计。

weixin_42153793的博客 160

Redis中什么是Big Key(大key)问题?如何解决Big Key问题?

通俗易懂的讲,Big Key就是某个key对应的value很大,占用的redis空间很大,本质上是大value问题。key往往是程序可以自行设置的,value往往不受程序控制,因此可能导致value很大。redis中这些Big Key对应的value值很大,在序列化/反序列化过程中花费的时间很大,因此当我们操作Big Key时,通常比较耗时,这就可能导致redis发生阻塞,从而降低redis性能。用几个实际的例子对大Key的特征进行描述:● 一个String类型的Key,它的值为5MB(数据过大); ● 一

weixiaohuai的博客 3万+

Minimum Inversion Number (逆序数----规律 + 线段树)

The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i &lt; j and ai &gt; aj. For a given sequence of numbers a1, a2, ..., an, if we move the fi...

短发 724

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1189

Minimum Inversion Number (单点更新 线段树 )

Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19112    Accepted Submission(s): 11525 Problem Description

略略略的博客 1470

论文必备 - YOLOv13热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv13热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 486

锂电池充放电管理-单片机通用模版

- **①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;** - **②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);** - **③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);** - **④充放电过程注意在电量划分等级临界值来回抖动现象;**

a6662580的博客 1488

Minimum Inversion Number(最小逆序数对 树状数组 HDU 1394)

Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24336    Accepted Submission(s): 14414   Problem Description The in...

SYITwin的博客 826

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 398

HDU 1394 Minimum Inversion Number (线段树 单点更新 求逆序数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给你一个n个数的序列,其中组成的数只有0-n,我们可以进行这么一种操作:把第一个数移到最后一个,次数不限。问,在原始数列和最新生成的数列中逆序数最小可以是多少? 刚开始以为需要枚举求逆序数,但最后知道了这个题是有规律的:一个由0-n组成的n个数的数列,当第一个数移到最后一位的时

顺便A道题 4223

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HDU1394 Minimum Inversion Number 逆序数- 线段树单点更新求

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目大意:给出一个长度为n的序列,序列中元素的值包含0到n-1,我们把第一个元素移到最后面,其他元素位置不变,得到一个新的序列,这样我们一个可以得到n个不同的序列,找出这n个序列中最小的逆序数。 分析:比HDU2689多了一步,我们在找出第一个序列的逆序数之后,如果把第一个元

AC_Gibson的专栏 524

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

档案馆物联网十防系统:从被动响应到主动闭环治理

档案库房环境安全是纸质与声像档案长期保存的基础前提,其核心在于温湿度、光照、有害气体等多维度协同防控。传统人工巡检与单点传感器监测存在响应滞后、误报率高、业务脱节等痛点,而基于物联网的智能防护体系通过感知层精准采集、边缘层毫秒级决策、应用层流程再造,实现防潮、防虫、防光等‘十防’要求的闭环治理。尤其在档案实体安全生命周期管理中,融合RFID光照计量、毛细现象反演湿度建模、行为指纹防盗等关键技术,显著提升环境稳定性与风险处置效率。本文以省级档案馆落地实践为蓝本,详解面向高密度纸质载体的物联网架构设计与工程化细

aofan9566的博客 396

hdu 1394 Minimum Inversion Number(线段树之 单点更新求逆序数)

Minimum Inversion Number                                                                           Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem D

LYHVOYAGE的专栏 1486

HDU 1394 Minimum Inversion Number 线段树 单点更新 求逆序数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:a1, a2, …, an-1, an a2, a3, …, an, a1 a3, a4, …, an, a1, a2 … an, a1, a2, …, an-1 求其中最小的逆序数的个数题解:从a[0]开始扫描,找比a[0]大的个数,也就是询问区间(a[0],n-1)中点的

yxg_123的博客 285

HDU 1394 Minimum Inversion Number(线段树单点更新)

http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:有0~n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,每得到一个序列都可得出该序列的逆序数(如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数)。要求求出最小的逆...

aocang4831的博客 219

线段树求逆序数 hdu 1394 Minimum Inversion Number

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394

黑山老猴妖的专栏 700

hdu 1394 Minimum Inversion Number(单点更新)

题意: 主要是利用线段树求逆序树,建的是一棵空树,然后每插入一个点之前,统计大于这个数的有多少个,直到所有的数都插入完成,就结果了逆序树的统计。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 #include #include #include using namespace std; #define maxn 50

我心中有猛虎 细嗅蔷薇 787

HDU 1394 Minimum Inversion Number(线段树求逆序数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and a...

1091

hdu 1394 Minimum Inversion Number(线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目大意:求数组的逆序数和,然后把第一个元素放最后,求一个新的逆序数和,重复操作,问最小的逆序数是多少。 数组大小为n,元素为0-n-1的数,且不重复。题目说了是a permutation of the n integers from 0 to n-1. 。 分成两步:先求原数

Algobird 507
上一篇: HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
下一篇: ZOJ 3471 Most Powerful(状压DP)
hellohelloC
博客等级 码龄12年 15粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值