#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)
答案 0 :(得分:0)
应该有堆栈溢出。
考虑使用new[]
分配足够而不是过多的内存。
要进行临时修复,请在static
或int
之前将long long
添加到三个非常大的数组中。