支配值数目

来源:互联网 发布:java线程池 编辑:程序博客网 时间:2024/04/29 00:45
/*    已知f[]与g[]两个整数数组,元素都已经从小到大排列,试编写程序算出f[]    中每一个元素比g[]中元素大的个数的总数。换句话说,f[0]比g[]中多少个    元素大、f[1]比g[]中多少个元素大等,这些值的总和就是所要求的答案。*/#include <iostream>using namespace std;template <typename T>int dominantCount(T*, T*, int, int);int main(void){    int m, n;    int *piArray1;    int *piArray2;    while (cin >> m >> n)    {        piArray1 = new int[m];        for (int i = 0; i < m; ++i)        {            cin >> piArray1[i];        }        piArray2 = new int[n];        for (int i = 0; i < n; ++i)        {            cin >> piArray2[i];        }        cout << dominantCount(piArray1, piArray2, m, n) << endl;    }    delete piArray1;    delete piArray2;    return 0;}template <typename T>int dominantCount(T *p1, T *p2, int m, int n){    if (p1[m-1] <= p2[0])    {        return 0;    }    int i = 0;    int length = 0;    int count = 0;    while (i < m && length < n)    {        if (p1[i] > p2[length])        {            ++length;        }        else        {            ++i;            count += length;        }    }    if (i < m)    {        count += (m - i) * length;    }    return count;}