#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int t;
cin>>t;
while(t--)
{
ll n, a[10000000];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n-1;i++)
{
int flag=0;
for(int j=i+1;j<n;j++)
{
if(a[j] > a[i])
{
cout<<a[j]<<" ";
flag=1;
break;
}
}
if(flag==0)
cout<<"-1 ";
}
cout<<"-1\n";
}
return 0;
}
为什么我在使用此代码时出现细分错误?代码中有什么错误吗?据我所知,代码没有错。请解释一下故障...
答案 0 :(得分:1)
a[10000000]
可能太大,无法自动存储。将大约1Mb的数量作为限制。
解决方法是将循环的前两行替换为
std::size_t n; // using a macro is a bad idea
std::cin >> n; // no professional programmer uses `using namespace std`
std::vector<long long/*using a macro is a bad idea*/> a(n);
请注意,如果std::vector
过大,则应该处理n
构造的任何例外情况。