首页 > 其他分享 >P1750 求逆序对

P1750 求逆序对

时间:2023-05-23 15:13:16浏览次数:31  
标签:arr temp int mid P1750 ++ 逆序

#include<iostream>
using namespace std;
int arr[500010],temp[500010];
long long ans;                                //记录逆序的组数
//归并排序
void merge_sort(int arr[], int temp[], int left, int mid, int right)
{
    int i = left, j = mid + 1;
    int k = left;
    //将分割成的两个有序数组排序,并且求逆序的个数
    while (i <= mid && j <= right)
    {
        if (arr[i] > arr[j])
        {
            ans += mid - i + 1;
            temp[k++] = arr[j++];
        }
        else
        {
            temp[k++] = arr[i++];
        }
    }
    //判断两个数组中的元素是否全部放入最后排序的数组中
    while (i <= mid)
    {
        temp[k++] = arr[i++];
    }
    while (j <= right)
    {
        temp[k++] = arr[j++];
    }
    //复制
    for (i = left; i <= right; i++)
    {
        arr[i] = temp[i];
    }
    return;
}
//将数组分割成有序,即分割至只含一个元素
void merge(int arr[], int left, int right, int temp[])
{
    if (left < right)
    {
        int mid = (left + right) / 2;
        merge(arr, left, mid, temp);
        merge(arr, mid + 1, right,temp);
        merge_sort(arr, temp,left, mid, right);
    }
}
int main()
{
    int n;
    cin >> n;
    int i;
    for (i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }
    merge(arr, 1, n, temp);
    cout << ans << endl;
    return 0;
}

 

标签:arr,temp,int,mid,P1750,++,逆序
From: https://www.cnblogs.com/lhf123/p/17425238.html

相关文章

  • 整数逆序
    题目:细节:输入int,放回StringclassIntegerReverseOrder{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intnumber=input.nextInt();Strings=String.valueOf(number);//int整数变成Strin......
  • Python中,y轴数据逆序问题的解决
    问题描述想要从高到低表示数据的变化,发现y轴数据与实际的二维坐标轴不相符问题解决在使用了x轴和y轴之后,加上这样一条代码:plt.gca().invert_yaxis()即可实现y轴由高到低变化,恢复正常实际!......
  • 三位数的逆序输出
    #include<stdio.h>intmain(){  intnum;  printf("请输入一个三位数:\n");  scanf("%d",&num);  inta=num%10;  intb=num/10%10;  intc=num/100;  intsum=a*100+b*10+c;  printf("三位数的逆序输出:%d\......
  • 数组的逆序输出
    1数组的逆序输出1import java.util.Scanner; public class P1427 { public static Scanner input = new Scanner(System.in); public static void main(String[] args) { int [] arr = new int [100]; System.out.println("请输入多个正整数(输......
  • 信奥赛题1105:数组逆序重存放
    新奥赛一本通,题11051105:数组逆序重存放时间限制:1000ms         内存限制:65536KB提交数:70600                通过数:47540【题目描述】将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。【输入】两行:第......
  • 【剑指 Offer】 51. 数组中的逆序对
    【题目】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例1:输入:[7,5,6,4]输出:5 限制:0<=数组长度<=50000来源:力扣(LeetCode)链接:https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-du......
  • AcWing 788 逆序对的数量
    788.逆序对的数量-AcWing题库逆序对,即位置顺序与大小顺序不符的数对,也就是对于一个期望升序的序列Num[],当i<j时,Num[i]>Num[j]这道题要求求出逆序对的个数,显然在归并排序的过程中我们就是在逐步的消除逆序对,所以我们可以在递归的排序过程中求出逆序对的个数已知归并排序是通......
  • 序列、排列的全排列的逆序对
    1.题目大意:给一个长度为n的的数组a,n是1到1e5,ai是1到1e5,问a的所有排序的序列的逆序对之和,会有重复的数字出现题目链接:https://ac.nowcoder.com/acm/contest/46597/Etypedeflonglongll;typedeflonglongLL;typedefpair<int,int>pii;typedefunsignedlonglongull;t......
  • 树状数组解决逆序对问题c++
    前言在算法竞赛中,求逆序对是一个常见的问题。逆序对是指在一个数列中,如果存在,且,那么就是一个逆序对。例如,数列中的逆序对有,总共有树状数组树状数组(FenwickTree)是一种高效的数据结构,用于维护数列的前缀和。树状数组的主要优势在于可以快速对数列进行单点更新和区间查询,时间......
  • 数组中的逆序对
    数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例1:输入:[7,5,6,4]输出:5限制:0<=数组长度<=50000分析:对于数组[7,5,6,4],若要计算其中的逆序对个数,及[7,5],[7,6],[7,4......