树状数组求逆序数原理_杂谈

news/2025/10/8 23:11:28/文章来源:https://www.cnblogs.com/Nexus-Raphael/p/19130262

谈一下树状数组怎么求逆序数,主要是记录用的,大家当乐子看就行

当得到一个数组,要求其逆序数时,人工最朴素的做法就是从前往后数,看这个数前面有多少个比它大的数,最终对这些结果求和就是整个数组的逆序数

使用树状数组的原理也是这个,一边从前往后遍历数组的位置,一边记录前面的数有多少个数比这个位置上的数字要小,这个位置的逆序数就是i-qry(pos),qry是查询从1到pos的数的出现有多少个数不大于当前位置的数

要做到这个实现,我们用树状数组维护这个过程,每遍历到一个数字,我们让在pos位置加1,并更新树状数组,然后查询1~pos

接下来又有一个小细节

  1. 如果数组中数字的出现不是连续的,比如说不是3 1 2 4这样出现的,而是100 10 20 4000这样出现的怎么办?

    ​ 我们进行离散化,输入数字时记录这个数的数值和位置,输入完之后根据数值进行排序,排序后的每个值位置依次变成1 2 3 . . . n。

上面这样处理对于重复大小的元素也能够正确处理,读者可以思考一下为什么

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N=5e5+5;
struct fac{int val,pos;
}a[N];
int b[N];
int tree[N];
int n;bool cmp(fac x,fac y){if(x.val==y.val) return x.pos<y.pos;return x.val<y.val;
}int lowbit(int x){return x&-x;}void ins(int p,int x){while(p<=n){tree[p]+=x;p+=lowbit(p);}
}int qry(int p){int ret=0;while(p>=1){ret+=tree[p];p-=lowbit(p);}return ret;
}void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].val;a[i].pos=i;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){b[a[i].pos]=i;}int ans=0;for(int i=1;i<=n;i++){ins(b[i],1);ans+=i-qry(b[i]);}cout<<ans<<endl;
}signed main(){ios::sync_with_stdio(false);cin.tie(0);int T=1;
//	cin>>T;while(T--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频网站建设价位又拍网站怎么做的

一、介绍 在kotlin中&#xff0c;有一种函数叫内联函数&#xff0c;这种函数标识符是inline&#xff0c;但是好多人对这个函数的理解只停留在八股文中&#xff0c;内容函数的用法和普通函数没有区别&#xff0c;但是在编译原理上是有&#xff0c;对程序的性能有一定的影响。 二…

20232427 2025-2026-1 《网络与系统攻防技术》实验一实验报告

一、实验目的 篡改程序流程——直接修改可执行文件,跳转至getShell; 栈溢出攻击——利用foo函数的缓冲区溢出漏洞,覆盖返回地址触发getShell; Shellcode注入——构造恶意输入注入自定义Shellcode并执行。 二、基础…

网站建设创业经历个人网页设计html代码免费

文章目录 一、引言1.1 为什么需要 Maven&#xff1f;1.2 Maven 解决了哪些问题&#xff1f;1.2.1 添加第三方jar包1.2.2 jar包之间的依赖关系1.2.3 处理jar包之间的冲突1.2.4 获取第三方jar包1.2.5 将项目拆分成多个工程模块1.2.6 实现项目的分布式部署 二、介绍三、Maven 的特…

遵义建设厅网站官网搞一个网站花多少钱

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用&#xff1a;避免空指针异常2.3 为什么要用&#xff1f;2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明&#xff1a; orElse 如何使用orElseGet 如何使用两者的…

网站开发实训要求建设个读书网站大约需要投入多少钱

在IRC中常见人问起&#xff0c;学C/C&#xff0c;在Linux下用什么工具好。有推荐vi/vim和emacs的&#xff0c;个人认为&#xff0c;那太难为像我们这样的初学者了。印象中&#xff0c;KDE中的KDeveloper非常的不错&#xff0c;简直就跟VC是一样的强大和方便。几年没用过了&…

墨西哥证券交易所(BMV)等多个交易所股票数据API对接文档

本文档详细说明如何对接StockTV全球股票API中的墨西哥股票数据。墨西哥股票市场是拉丁美洲重要的金融市场之一,包含墨西哥证券交易所(BMV)等多个交易所。 认证方式 所有API请求都需要在URL参数中包含API Key: key=您…

Kubernetes技术详解-从理论到实践-(5)-控制器-Deployment - 详解

Kubernetes技术详解-从理论到实践-(5)-控制器-Deployment - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

项目案例作业2

案例中的 setter/getter 模式与封装性(姓名:周广磊 学号:202421336092) 2.1 什么是 setter/getter? setter 方法(也称为修改器方法)和 getter 方法(也称为访问器方法)是面向对象编程中用于操作类私有属性的公…

P5664 [CSP-S2019] Emiya 家今天的饭 题解

题目传送门 洛谷 P5664 前言 本题解为作者整合了自己学习其他题解后为自己写的用以复习的笔记,不喜勿喷谢谢,但是有逻辑错误或语言不清晰之处欢迎提出! 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 \(n\) 种烹饪…

网站建设艾瑞市场分析英国设计网站

目录 Optional 的方法 Optional实例 《天道》丁元英经典语录 所谓真经,就是能够达到寂空涅盘的究竟法门。可悟不可修。修为成佛,在求。悟为明性,在知。修行以行制性。悟道以性施行。觉者由心生律;修者以律制心,不落恶果者有信无证,住因住果,住念住心,如是生灭。不昧…

谷歌网站开发用什么框架next wordpress

近日&#xff0c;JetBrains 对外发布两项重要产品更新&#xff1a;专为云端和其他服务器打造的远程开发解决方案&#xff0c;以及轻量级编辑器Fleet。 为IntelliJ 平台引入远程开发支持 在近期陆续发布的2021.3 版本的各 IDE 中&#xff0c;JetBrains 向 IntelliJ 平台添加了远…

PWN手的成长之路-11-CISCN 2019华北 PWN1-栈溢出

远程连接以下靶机,看看交互。file 查看程序文件。checksec 查看程序文件安全属性。开启了 NX 保护,栈上不可执行。IDA 打开程序文件。查看 ain 函数,发现调用了 func 函数。查看 func 函数。这里需要判断 v2 是否等…

sensitive-word:一个简单易用的敏感词过滤框架

这篇文章,分享一个开源项目:sensitive-word 。Github 地址:https://github.com/houbb/sensitive-wordsensitive-word 是一个功能强大的 Java 敏感词过滤框架,它不仅提供了基础的敏感词检测功能,还支持单词标签分类…

回归学习——包机制

回归学习 包机制 包的本质就是文件夹,用来区别类名的命名空间。一个文件在写的时候要把包写在最前面,一般利用公司倒置作为包名,为了能够使用一个包的成员,我们需要在Java程序中明确导入该包,方式为使用‘import语…

哈尔滨中小企业网站制作长沙知名网站

无论是前面学习的序列式容器,还是关联式容器,要想实现遍历操作,就必须要用到该类型容器的迭代器。当然,map 容器也不例外。C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、--p、p--、*p 操作,并且迭…

网站建设职责网站源码大全

一、需求 用户输入四个季度的数据&#xff0c;根据数据生成柱形统计图&#xff0c;浏览器预览效果如下 二、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…

wordpress动漫主题秦皇岛seo排名

二叉树相关推荐 107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II总结 107.二叉树的层次遍历II 切片本质是一个结构体&#xff0c;包含…

vue 组件的常见8种通信方式

1、通过props传递‌,emit触发自定义事件: 父传子:子组件中通过props接收父组件传递的数据。 ‌子传父:子组件通过emit触发一个事件,父组件监听这个事件来接收数据。 vue2:通过props和$emit vue3:script中setup,…

技能训练企业网站建设可行性分析企业网站建设 百度文库

文章目录 参考环境常量数组不可变性版本限制 constdefine()构造大小写不敏感的常量$case_insensitive 参数PHP7.3PHP8 若 define() 在不支持常量数组的版本中运行 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 手册PHP Man…

251008

251008美好的一天从现在开始