Ошибка сегментации при использовании long long int - PullRequest
0 голосов
/ 21 февраля 2020

Я решал этот вопрос. Я написал код и получил неправильный ответ для 10 тестовых случаев и исправил для 6. Я проверил ограничения и, поскольку они выходят за пределы диапазона int , поэтому я заменил int на long long int . 9 тестовых примеров пройдено, но остальные 7 показывают ошибку сегментации.

В чем может быть причина?

#include <iostream>
using namespace std;

int main()
{
    long long int n,m; 
    cin>>n>>m; 
    long long int arr[n]={0}; 
    long long int a,b,k; 
    long long int maxi=0;

    while(m--)
    {
        cin>>a>>b>>k;

        for(long long int i=a-1; i<b; i++)
        {
            arr[i]+=k;
        }
    }

    for(long long int i=0; i<n; i++)
    {
        if(maxi<arr[i]){maxi=arr[i];}
    }

    cout<<maxi;

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Основная проблема:

long long int arr[n]={0}; 

Это недопустимый стандарт C ++, и если массив слишком большой, он не помещается в стек, вам нужно динамически распределить массив, желательно использовать std::vector для этого, вот так

std::vector<long long int> arr{};
arr.resize(n);

Кроме того, вам, вероятно, следует проверить, находится ли каждый доступ к массиву внутри границ.

0 голосов
/ 21 февраля 2020

Вы можете попробовать с помощью динамического c выделения

long long int *arr = new long long int[n];

не забудьте освободить память, когда вы закончите

delete []arr;
...