-1
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <utility>
#include <functional>
#include <cmath>
#include <climits>
using namespace std;
#define pb push_back
#define mp make_pair
#define ll long long
int main (void)
{
int i,j,k,n;
int arr[500001];
long long ans[500001];
int val = INT_MIN;
cin>>n;
for (i = 0; i < n; i++)
{
cin>>arr[i];
if (val < arr[i])
val = arr[i];
}
long long count[500001];
for (i = 0; i < n; i++)
count[arr[i]]++;
//int ans = INT_MIN;
ans[0] = 0;
ans[1] = count[1];
for (i = 2; i <= val; i++)
{
ans[i] = max(ans[i-1],ans[i-2]+count[i]*i);
}
cout<<ans[val]<<"\n";
return 0;
}
所以,我實現了這個簡單的代碼,我在那裏聲明3個數組,並根據我的問題(這是一個單獨的事情)嘗試稍微調整一下。但是一旦我啓動這個代碼,我就會看到一個分段錯誤。我不知道爲什麼?爲什麼會發生?我試圖通過調試器運行它,它顯示了max函數中可能的錯誤。因此,我創建了自己的maxi
函數,但它仍然顯示分段錯誤?爲什麼在此代碼中出現分段錯誤?
編輯:關於使用調試器,它顯示以下內容:
template <class _Tp, class _Compare>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
const _Tp&
max(const _Tp& __a, const _Tp& __b, _Compare __comp)
{
return __comp(__a, __b) ? __b : __a;
}
Thread 1: EXC BAD_ACCESS (code=2, address=0x7fff5f276154)
也許使用調試器將至少告訴發生這種情況的線路 –
PS。相當大的結構放在堆棧上。把它們放在堆上。這可能會幫助 –
'arr [i]'或'val'可以超過'500000'嗎? – NathanOliver