HDU1394 - Minimum Inversion Number(线段树)

【chatgpt代码系列】磁导航纠偏算法推导 例如,可以根据AGV偏离路径的方向和距离,计算出需要进行的修正角度和移动距离,然后通过控制算法实现对AGV的纠偏。具体来说,磁导航AGV的行驶是通过磁场传感器感知地面磁场信号,然后根据信号的强度和方向来确定AGV的位置和方向,进而控制AGV的行驶。但是,在实际应用中,由于地面磁场信号的变化和干扰等因素,磁导航AGV可能会出现偏离路径的情况,导致行驶不稳定甚至出现误差。磁导航AGV纠偏公式是通过对AGV行驶中偏离路径的原因进行分析,结合磁导航AGV的工作原理和控制算法,推导出来的。假设AGV的目标方向为。 阅读详情

题目链接:

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);
    }
}
Open3D 计算点云配准的旋转和平移误差 通过计算旋转误差和平移误差来量化配准结果与真实变换之间的偏差。 阅读详情

相关推荐

半桥LLC谐振变换器及同步整流MATLAB仿真(一)

LLC工作原理详细解析,工作过程详细拆解

qq_55203246的博客 3万+

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

ros_control硬件接口实战:从零构建机器人控制框架

本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。

lstm7chronicler的博客 500

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

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

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

万物皆可GAN ---普通GAN, pix2pix, CycleGAN和pix2pixHD的比较以及演变过程

普通GAN, pix2pix, CycleGAN和pix2pixHD的原理、比较以及演变过程

m0_61985580的博客 3724

【线段树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

微信小程序- 云开发上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。(小程序上传部署云函数提示错误,开发控制台中的云函数没有删除,详细排查)

微信小程序——云函数上传失败,微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。微信小程序上传云函数失败,微信小程序云开发|Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。微信云开发报错(Error: ResourceNotFound.FunctionName,微信小程序云函数报错,上传云函数 sum 失败 Error:,上传部署我们的云函数 2. 报错 错误信息

🏆 前端领域优质创作者 4315

jira的详细使用教程

​jira的详细使用教程,1,Jira- 是一款缺陷管理软件工具,用其进行缺陷的管理和跟踪。(是B/S架构的软件) 2,主要涉及的角色: 3,具体工作流 添加工作流 1.点击项目设置

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3295

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

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

闲停 819

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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、付费专栏及课程。

余额充值