数组中的C ++计数反转,致命信号11(BIT)

时间:2018-12-14 14:44:29

标签: c++ algorithm binary-indexed-tree

我在编程“课程”中受到了this的挑战。最终,我决定选择“二进制索引树”解决方案,因为数据结构是我想了解的更多信息。实施BIT有点直截了当,此后的事情-没那么多。在将解决方案上载到服务器时,我遇到了“致命信号11”,从我阅读的内容来看,它有点类似于Null指针异常。无法解决问题,决定使用BIT解决other解决方案,但偶然发现了相同的问题。

#include<iostream>
using namespace std;



/*    <BLACK MAGIC COPIED FROM geeksforgeeks.org>     */
int getSum(int BITree[], int index){
    int sum = 0;
    while (index > 0){
        sum += BITree[index];
        index -= index & (-index);
    }
    return sum;
}
void updateBIT(int BITree[], int n, int index, int val){
    while (index <= n){
       BITree[index] += val;
       index += index & (-index);
    }
}
/*    <BLACK MAGIC COPIED FROM geeksforgeeks.org>     */




int Count(int arr[], int x){
    int sum = 0;
    int biggest = 0;

    for (int i=0; i<x; i++) {
        if (biggest < arr[i]) biggest = arr[i];
    }

    int bit[biggest+1];

    for (int i=1; i<=biggest; i++) bit[i] = 0;

    for (int i=x-1; i>=0; i--)
    {
        sum += getSum(bit, arr[i]-1);
        updateBIT(bit, biggest, arr[i], 1);
    }
    return sum;
}

int main(){
    int x;
    cin >> x;


    int *arr = new int[x];
    for (int temp = 0; temp < x; temp++) cin >> arr[temp];

        /*sizeof(arr) / sizeof(arr[0]); <-- someone suggested this, 
        but it doesn't change anything from what I can tell*/

    cout << Count(arr,x);

    delete [] arr;
    return 0;
}

我对此很困惑。我可能只是简单的一些事情,但我真的不知道。任何帮助深表感谢!

1 个答案:

答案 0 :(得分:2)

您的条件是每个数字都在1到10 18 之间。因此,您的最大数字可以是10 18 。对于以下行,这太多了:

int bit[biggest+1];