C ++ Подсчет инверсий в массиве, фатальный сигнал 11 (BIT) - PullRequest
0 голосов
/ 14 декабря 2018

Мне дали эту задачу в "классе" программирования.В конце концов я решил использовать решение «Binary Indexed Trees», поскольку о структурах данных мне хотелось бы узнать больше.Внедрение BIT было довольно простым, после этого - не так много.Я столкнулся с «Фатальным сигналом 11» при загрузке решения на сервер, который, из того, что я прочитал, чем-то похож на исключение нулевого указателя.Не смог разобраться в проблеме, решил проверить другие решения с помощью 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 Ответ

0 голосов
/ 14 декабря 2018

У вас есть условие, что каждое число лежит в диапазоне от 1 до 10 18 .Итак, ваш самый большой номер может быть 10 18 .Это слишком много для следующей строки:

int bit[biggest+1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...