首页 > 其他分享 >树状数组实现 查找逆序对

树状数组实现 查找逆序对

时间:2024-07-06 11:30:15浏览次数:17  
标签:树状 int ll long 查找 整数 数组 逆序

 题意:

输入一个整数n。

接下来输入一行n个整数a_{1},a_{2},a_{3}...a_{n} 。

1<= a_{i} <= n ,且每个数字只会出现一次

题解:

按每个数字的大小存入树状数组

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=10000;
int arr[N];
ll a[N];
int n;

ll query(int x){
  ll s=0;
  for(;x;x-=x&(-x)){
    s+=a[x];
  }
  return s;
}

void modify(int p,ll x){
  for(;p<=n;p+=p&(-p)){
    a[p]+=x;
  }
}


int main(){
  scanf("%d",&n);
  for(int i=1;i<=n;i++){
    scanf("%d",arr+i);
    //让大于arr[i]的元素在数组数组中排在它的前面方便使用前n项和
    arr[i]=n+1-arr[i];
  }
  ll ans=0;
  for(int i=1;i<=n;i++){
    //每一次有多少个大于它的值就会新增多少个逆序对
    ans+=query(arr[i]);
    //然后统计完该数的逆序对后,再将该数放入到树状数组中
    modify(arr[i],1);
  }
  printf("%lld",ans);
  return 0;
}

标签:树状,int,ll,long,查找,整数,数组,逆序
From: https://blog.csdn.net/zaqjkl/article/details/140220951

相关文章

  • 【34. 在排序数组中查找元素的第一个和最后一个位置】
    题目:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你必须设计并实现时间复杂度为O(logn)的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,10],t......
  • 2024华为OD机试真题-根据IP查找城市-(C++/Python)-C卷D卷-200分
    2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)       题目描述某业务需要根据终端的IP地址获取该终端归属的城市,可以根据公开的IP地址池信息查询归属城市。地址池格式如下:城市名=起始IP,结束IP起始和结束地址按照英文逗号分隔,多个地址段采用英文分号分隔。比......
  • 数据结构实验报告:查找
     一、实验目的1.掌握查找表的结构。2.掌握顺序查找、折半查找、二叉排序树查找和哈希查找。二、实验环境Windows10、VisualC++6.0三、实验任务1.编写程序实现顺序查找和折半查找。(1)顺序查找#include<stdio.h>#include<stdlib.h>#defineLIST_SIZE20typ......
  • Day1| 704. 二分查找 &27. 移除元素
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/description/思路:切记二分查找要基于排序好的数组或者数据,否则二分查找必不能使用!!!!!!!!!双指针写最简单,一个头指针从0开始,一个尾指针从数组长度-1开始,中间指针是头+尾/2,每次比较头尾中间指针的值......
  • SQL查找在职员工自入职以来的薪水涨幅情况
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述有一个员工表employees简况如下:有一个薪水表salaries简况如下:......
  • SQL 查找所有员工的last_name和first_name以及对应的dept_name
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述有一个员工表employees简况如下:有一个部门表departments表简况如......
  • 代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素
    704.二分查找这个之前有写过,最重要的就是把握住要去搜索的区间的形式,包括左闭右闭以及左闭右开两种classSolution{publicintsearch(int[]nums,inttarget){intleft=0,right=nums.length;while(left<right){//左闭右开的版本,结果存储......
  • 武汉凯迪正大电分享查找电缆故障点与主要原因
    电缆运行环境复杂电缆故障时有发生,快速准确地查找电缆故障点并采取有效的处理措施对于保障电缆的正常运行具有重要意义。一、电缆故障点查找方法概述电缆故障点的查找方有多种包括测声法、电桥法、脉冲反射法等等,其中测声法主要利用故障电缆放电的声音进行查找适用于高压电......
  • 树状数组和线段树板子
    树状数组板子#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<string.h>#include<iomanip>#include<stdlib.h&g......
  • Linux——查找文件-find(详细)
    查找文件-find 作用-按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件格式find 查找路径  查找条件 具体条件 操作注意-find命令默认的操作是print输出-find是检索文件的,grep是过滤文件中字符串 参数参数         ......