簡體   English   中英

數組中的C ++計數反轉,致命信號11(BIT)

[英]C++ Counting inversions in array, Fatal Signal 11 (BIT)

在編程“課程”中給了我這個挑戰。 最終,我決定選擇“二進制索引樹”解決方案,因為數據結構是我想了解的更多信息。 實施BIT有點直截了當,此后的事情-沒那么多。 在將解決方案上載到服務器時,我遇到了“致命信號11”,從我閱讀的內容來看,它有點類似於Null指針異常。 無法解決問題,決定使用BIT檢查其他解決方案,但偶然發現了相同的問題。

#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到10 18之間。 因此,您的最大數字可以是10 18 對於以下行,這太多了:

int bit[biggest+1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM