XDOJ 简单逆序对

来源:互联网 发布:软件开发知识库 编辑:程序博客网 时间:2024/06/05 05:57

问题 B: 简单逆序对

时间限制: 1 Sec  内存限制: 128 MB
提交: 1661  解决: 241
[提交][状态][讨论版]

题目描述

逆序对问题对于大家来说已经是非常熟悉的问题了,就是求i<j时,a[i] > a[j]的组数。现在请你求出一串数字中的逆序对的个数,需要注意的是,这些数字均在[0,9]之内。

输入

第一行输入T,表示有T组测试数据
对于每组数据,首先输入n,代表有n个数(0<n<=10^6)
接下来输入n个数,每个数都在[0,9]之内

输出

输出逆序对的个数,且对10^9+7取模

样例输入

233 2 131 2 1

样例输出

31
思路:

        由于数据在0-9之间,可使每次的数据存入数组B[10]中,每个下标对应一个数的计数,只要计算B中比当前数的总和即可


</pre><pre name="code" class="cpp">#include<stdio.h>#define Mod 1000000007#define Max 1000000int Array[Max];int main(){    int T,n,p;    scanf("%d",&T);    for(p=0;p<T;p++)    {        int Num[10]={0};        scanf("%d",&n);        int i,num=0;        for(i=0;i<n;i++)            scanf("%d",&Array[i]);        for(i=0;i<n;i++)        {            int k,sum=0;            k=Array[i];            Num[k]++;            int i0;            for( i0=k+1;i0<10;i0++)                sum=(sum+Num[i0])%Mod;            num=(num+sum)%Mod;        }        printf("%d\n",num);    }    return 0;}


0 0
原创粉丝点击