-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