HDU1394 - Minimum Inversion Number(线段树)

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行 dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发 阅读详情

题目链接:

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


题目大意:

给定一个由 0 到n−1组成,长度为 n 每个元素唯一的序列,可以进行一种操作,把第一个元素放到最后一个位置。求经过若干次操作后的,最小逆序对数。


解题过程:

这题之前写过一个暴力解法的题解,现在用线段树来解决一下。


题目分析:

这里用线段树主要是求解初始状态的逆序对数,对于每次的操作有一个结论可以用。

要求逆序对数,那么对于每个数我要求在这个数之前有多少个大于这个数的元素。

因为序列的元素是从0到 n−1 的,那么我用 n 个叶子节点去维护这些值是否出现过,出现置1否则为 0 ,对于非叶子节点就维护区间内数字出现的个数,那么我要查询比a大的数有几个,那么我只需要查询 [a,n] 这个区间的值就好了。

这题比较容易做,其他题可能也会用到这个思想,不过数字不是从 0 到n−1的,需要离散化一下。


AC代码:

#include <bits/stdc++.h>
using namespace std;

#define lson root<<1
#define rson root<<1|1
#define MID int m = (l + r) / 2

const int MAX = 5000+10;

int data[MAX], tree[MAX<<2];

void build(int root, int l, int r) {
    if (l == r) {
        tree[root] = 0;
        return;
    }
    MID;
    build(lson, l, m);
    build(rson, m+1, r);
    tree[root] = tree[lson] + tree[rson];
}

void updata(int root, int l, int r, int pos) {
    if (pos < l || pos > r)
        return;
    if (l == r) {
        tree[root] = 1;
        return;
    }
    MID;
    updata(lson, l, m, pos);
    updata(rson, m+1, r, pos);
    tree[root] = tree[lson] + tree[rson];
}

int query(int root, int l, int r, int ql, int qr) {
    if (qr < l || r < ql)
        return 0;
    if (ql <= l && r <= qr) {
        return tree[root];
    }
    MID;
    return query(lson, l, m, ql, qr) + query(rson, m+1, r, ql, qr);
}

int main() {
    int n;
    while (~scanf("%d", &n)) {
        build(1, 1, n);
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            scanf("%d", &data[i]);
            data[i] += 1;
            //这里处理了一下,下标从1开始比较方便
            //大于data[i],查询[data[i], n]区间的值就是i之前比data[i]大的元素的个数
            sum += query(1, 1, n, data[i], n);
            updata(1, 1, n, data[i]);
        }
        int rst = sum;
        for (int i = 1; i <= n; i++) {
            sum += n - data[i];
            sum -= data[i] - 1;
            rst = min(sum, rst);
        }
        printf("%d\n", rst);
    }
}
视图库对接系列(GA-T 1400)四、视图库对接系列(本级)注册 在之前的步骤中,我们已经把项目大体的架构已经写出来了。那我们就来实现注册接口。GA-T 1400中的步骤如下:这里的话,我们实现的简单点, 我们不进去鉴权,也就是设备或平台找我们注册的话,我们直接返回成功,不进行验证。如果需要鉴权的话可看我的另外一篇文档。 阅读详情

相关推荐

STM32F4驱动ADS1220高精度ADC:从SPI配置到数据校准的完整实战指南

本文详细介绍了如何使用STM32F4微控制器驱动ADS1220高精度ADC,涵盖从SPI接口配置、寄存器设置到数据采集与校准的全过程。通过实战代码示例和硬件设计要点,帮助开发者快速构建高精度数据采集系统,适用于工业测量和精密仪器等应用场景。

weixin_26918763的博客 224

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

题目描述HDU 1394 Minimum Inversion Number解题思路题目大意: 给出0~n-1的一个排列,每次可以把前m个数放在后面,eg: a1{a}_{1}, a2{a}_{2}, …, an−1{a}_{n-1}, an{a}_{n} (m=0)(m = 0 ) a2{a}_{2}, a3{a}_{3}, …, an{a}_{n}, a1{a}_{1}

FZU_zyt的专栏_(:з」∠)_ 414

VS Code配置MASM32汇编环境:从安装到调试的完整指南

本文提供了一份详尽的指南,教你如何在VS Code中配置MASM32汇编开发环境,实现从安装、环境变量设置到编写、编译和调试32位Windows汇编窗口程序的完整工作流。通过集成现代编辑器的便利性与经典汇编工具链,旨在降低学习门槛,提升底层开发效率。

nn3456的博客 483

hdu1394(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)...

weixin_30709809的博客 96

保姆级教程:用vxe-grid给管理后台加个「智能筛选」功能(支持模糊搜索/多选/范围查询)

本文提供了一份详细的Vxe-Grid智能筛选功能实现教程。通过自定义筛选器渲染,文章逐步指导开发者为后台管理系统添加支持模糊搜索、多选下拉和数值范围查询的智能筛选功能,并分享了性能优化与移动端适配等实战经验。

weixin_29021291的博客 536

语义通信理论必看论文:Towards a Theory of Semantic Communication

了解语义通信发展必看的一篇文章

一去不复返的通信er 3925

hdu 1394 Minimum Inversion Number 线段树

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 先求出原串的逆序数,然后每次最前一个数放在最后逆序数的变化量为 : n-2*num[i]-1 ,解释如下 因为每次都是把最前一个数num[i]换到最后,也就是说此时比num[i]小的数全在其后,也就是有num[i]组逆序数对,于是ans-=num[i] (减去这个数原有的逆序数对) 然后放在最

yjCola 577

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析

本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。

weixin_26897585的博客 236

【线段树I:点修改+区间查询】hdu 1394 Minimum Inversion Number

【线段树】hdu 1394 Minimum Inversion Number题目链接:hdu 1394 Minimum Inversion Number题目大意给你N个数的排列,求包括该序列在内的所有循环序列的最小逆序对数(N<5000) 暴力的话O(n^3)直接超时,线段树一开始还真不好想啊!最关键的是弄明白每个节点中的sum代表什么意思:【lc,rc】区间出现的数的个数,因为这道题n个数大小0

Hacker_vision 763

HFSS实战项目——基片集成波导(SIW)带通滤波器

设计了一款直接耦合的SIW带通滤波器, 采用直接耦合的形式, 工作频率覆盖19~21 GHz, 通带内插入损耗小于1.5 dB, 回波损耗小于-20 dB, 带外抑制特性良好.

2401_87464239的博客 4897

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

[HDU 1394]Minimum Inversion Number[逆序对][线段树]

题目链接:[HDU 1394]Minimum Inversion Number[逆序对][线段树] 题意分析: 实质上来说,这道题就是求n个小于n的数的排列变成环之后,从其中某一点切开的最小逆序对数。 解题思路: 第一步:求出初始逆序对数。可以用归并排序,这里我用了线段树。 能使用线段树的理由:线段树存储的是一个区间段的值,应用到求逆序对数,我们就可以让它初始时都为0,每次加入一个数x前

闲停 819

uniapp [安卓苹果App端] - 实现支付宝支付功能+拉起支付宝app付款支付后返回跳转到原页面,详解uniApp如何唤起本机支付宝并跳转到支付页面全流程及示例源码(APP端支付宝支付,支持打包

全网最详细的uniapp支付宝支付教程,uniapp支付宝支付流程,uni-app项目在APP端使用支付宝支付功能,uniapp前端实现支付宝支付,uniapp中唤醒支付宝进行支付并返回app,uniApp调起支付宝支付失败报错,uniapp app端调支付宝支付接口,uniapp开发安卓App对接支付宝支付,uniapp苹果ios唤起支付宝支付,uniapp调用支付宝支付uniapp开发app-调用支付宝支付,uniapp开发安卓苹果app如何接入支付宝支付,UniApp中实现支付宝支付功能,支付报错,调

🏆 前端领域优质创作者 1万+

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU1394 Minimum Inversion Number 线段树+数学

Problem DescriptionThe 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

Bill_Utada的成长之路 1077

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hdu1394 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): 27295Acc...

卑鄙的我 157

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HDU 1394 Minimum Inversion Number 线段树

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

学 以致用 236

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

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

aocang4831的博客 219

HDU1394 Minimum Inversion Number 线段树

传送门:HDU1394 题意:给定1-n的一个排列,可以将前面任意多个数按顺序放到后面形成新的序列,问所有这些序列中逆序数最小值为多少。 思路:只要求出第一个序列的逆序数来,其他序列的逆序数就可以递推出来,因此重点在于第一个序列的逆序数怎么求,因为数据范围较小,可以考虑用树状数组或者线段树维护1-n每个点,出现过就更新为1,否则为0,则每个数产生的逆序数(即每个元素对总逆序数的贡献)就可以在输

WA是一笔财富 266

HDU1394——线段树——Minimum Inversion Number

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, ...,...

dgjm4087的博客 125

hdu 1394 Minimum Inversion Number 【线段树查找】

Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i aj. For a given sequence of numbers a1, a2, ..., an, if we mov

ACM_e的博客 368

Minimum Inversion Number 【HDU - 1394】【线段树维护逆序对数】

题目链接 我们可以移动首点放到队尾上去,问的是这样的N种组合种,逆序对数量最小的那一对。 我们可以利用线段树O(N*log(N))的求出初始时候的逆序对的个数,每次往后塞进去一个,将头放到尾上去,然后呢,会发现,我们把头放到尾,少掉的对逆序对的贡献是a[i] - x(a[i]个比它小的点),多出来的对逆序对的贡献是N - 1 - a[i] - x(x指的是原本有x个"<a[i]"...

既然弱小,就只顾变强就是了 244

HDU 1394 Minimum Inversion NumberMinimum Inversion Number(线段树)

http://acm.hdu.edu.cn/showproblem.php?pid=1394 部分来自http://blog.youkuaiyun.com/libin56842/article/details/8531117 写给那些 刚入门线段树,开始和我一样对解题迷茫的人. 题意 求最小逆序数 逆序数的概念 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就

小小码农 490

HDU1394 Minimum Inversion Number(线段树)

Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i aj. For a given sequence of numbers a1, a2, ..., an, if we mov

蒟蒻升级中...Orz 934

HDU1394 Minimum Inversion Number(线段树)

Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17169 Accepted Submission(s): 10439Problem Description The inversio

MrBlank的ACM记事本 505
上一篇: 线段树小结
下一篇: HDU4027 - Can you answer these queries? (线段树)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值