首页 > 其他分享 >P1908 逆序对

P1908 逆序对

时间:2023-07-27 09:33:34浏览次数:21  
标签:return P1908 int 个数 pos ans 逆序

输入格式

第一行,一个数 n,表示序列中有 n个数。

第二行 n 个数,表示给定的序列。序列中每个数字不超过 109109。

输出格式

输出序列中逆序对的数目。

 

依次输入n个数,输入的过程中将树状数组第a[i]加上1,统计比a[i]大的数字的个数的和,依次相加,便是逆序对的个数

#include <iostream>
#include <algorithm>

using namespace std;

#define int long long

int n, m, tree[500010], ans, b[500010];
struct A
{
    int w, i;
} a[500010];

bool cmp(A a, A b)
{
//注意当两个数大小相等时,以它们的下标排序
    return a.w == b.w ? a.i < b.i : a.w < b.w;
}

int lowbit(int x) { return x & -x; }

void add(int pos, int x)
{
    while (pos <= n)
    {
        tree[pos] += x;
        pos += lowbit(pos);
    }
}

int query(int pos)
{
    int ans(0);
    while (pos > 0)
    {
        ans += tree[pos];
        pos -= lowbit(pos);
    }
    return ans;
}

signed main()
{
    cin >> n;
    for (int i(1); i <= n; ++i)
    {
        cin >> a[i].w;
        a[i].i = i;
    }
//将a排序,并离散化
    sort(a + 1, a + 1 + n, cmp);
    for (int i(1); i <= n; ++i)
    {
        b[a[i].i] = i;
    }
//统计答案
for (int i(1); i <= n; ++i) { add(b[i], 1); ans += query(n) - query(b[i]); } cout << ans; system("pause"); return 0; }   

  

标签:return,P1908,int,个数,pos,ans,逆序
From: https://www.cnblogs.com/bszzz/p/17584082.html

相关文章

  • 逆序对
    “逆序对”归并和线段树两种解法。这道经典题存在于任何一个算法题库中,故单独拿出分析讨论。暴力如果仅仅是用暴力、普通的分治方法。遇到数据量较大时内存不够。归并归并排序的时间复杂度用归并法解此题之前先考虑一下,为何归并排序的时间复杂度是\(O(nlog_n)\)?答:首先是......
  • HJ106 字符逆序
    1.题目读题HJ106 字符逆序  考查点 2.解法思路 代码逻辑 具体实现publicclassHJ106{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println(reverse(sc.nextLine()));}publicst......
  • Java字符串逆序的四种方法及比较
    Java中实现字符串逆序有以下几种常见的方法:方法一:使用StringBuffer或StringBuilder的reverse()方法。这是最简单和最直接的方法,只需要将String对象转换为StringBuffer或StringBuilder对象,然后调用它们的reverse()方法,就可以得到逆序的字符串。例如:publicclassStringReverse......
  • 求线性代数逆序数概念是啥意思?
    想要搞明白线性代数的“逆序”问题,不需要直接看生硬的概念,直接上手做几道题,循序渐进的就明白了——简单的说,只需要看下面这三篇笔记:你知道怎么判断一组数字的逆序数吗?你会使用逆序计算这个行列式吗?利用逆序求\(n\)阶行列式的值​......
  • 归并排序-逆序对的数量
    归并排序-逆序对的数量原理略代码#include<iostream>usingnamespacestd;constintN=1e5+10;typedefunsignedlonglongULL;ints[N],tmp[N];ULLmergeSort(intl,intr){if(l>=r)return0;intmid=(l+r)>>1;ULLres=merg......
  • LOJ#6077. 「2017 山东一轮集训 Day7」逆序对题解
    考虑朴素dp,令\(f_{i,j}\)为\(1\simi\)排列有\(j\)个逆序对的排列数。有转移方程:\[f_{i,j}=\sum_{k=0}^{i-1}f_{i-1,j-k}\]特殊地,我们定义\(j<0\)的\(f_{i,j}\)为\(0\)。定义\(\displaystyleF_i(x)=\sum_{j=0}^{\infty}f_{i,j}x^j\),有\(\displaystyleF_{i}(x)=......
  • 【剑指Offer】35、数组中的逆序对
    【剑指Offer】35、数组中的逆序对题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出P%1000000007。输入描述:题目保证输入的数组中没有的相同的数......
  • 逆序数的讨论
    今天初中班主任问我一道题:想了想这就是逆序数的问题。逆序数为,一个从1到n的排列的逆序数个数。对于这道题,就是一个从1到8的逆序数为8的排列的个数。相关论文:https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKgchrJ08w1e7_IFawAif0mzHoqs1uKxDSYgJRaQREx5nVao7p......
  • 算法学习(22): 逆序对与原序列
    逆序对与原序列在《组合数学》中有这么一个从逆序列构建一个排列的过程……而刚好有一场考试有考了类似的问题,于是在此总结一下。目录逆序对与原序列逆序列逆序个数带修改问题逆序列假定我们有序列\(P\)是\(\{1,2,\cdots,n\}\)的一个排列。如果\(i<j\)并且\(p_......
  • 逆序的三位数 (10 分) python版
    逆序的三位数(10分)python版程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321'''Createdon2019年11......