C++ 使用一个memset数组和一个堆栈查找O(n)中数组的下一个较大元素

C++ 使用一个memset数组和一个堆栈查找O(n)中数组的下一个较大元素,c++,while-loop,stack,store,memset,C++,While Loop,Stack,Store,Memset,我的代码不适用于输入: 10 3 *12* 4 2 9 13 0 8 11 1 7 5 6 其正确输出为: 12 12 *13* 9 9 13 -1 8 11 -1 7 -1 6 -1 12 12 *-1* 9 13 13 -1 8 11 -1 7 -1 6 -1 代码的输出是: 12 12 *13* 9 9 13 -1 8 11 -1 7 -1 6 -1 12 12 *-1* 9 13 13 -1 8 11 -1 7 -1 6 -1 我可以看到,这是因为在while(!s.emp

我的代码不适用于输入:

10 3 *12* 4 2 9 13 0 8 11 1 7 5 6  
其正确输出为:

12 12 *13* 9 9 13 -1 8 11 -1 7 -1 6 -1
12 12 *-1* 9 13 13 -1 8 11 -1 7 -1 6 -1
代码的输出是:

12 12 *13* 9 9 13 -1 8 11 -1 7 -1 6 -1
12 12 *-1* 9 13 13 -1 8 11 -1 7 -1 6 -1

我可以看到,这是因为在
while(!s.empty()&&a>s.top())
部分中,我没有存储
a代码中有一个小错误的元素的索引值。更新
c[index]=value
的值时,
索引不正确。在处理过程中,从
堆栈中弹出一些元素
,并在末尾推送值(例如:位置为10的值可以在0到10之间的任何位置推送),但在后退过程中,您不知道该值的正确位置

所以,我在代码中做了幻灯片更改,跟踪了值的位置以及值本身。因此,当我更新
c[index]=value
时,我知道
s.top()
元素的正确索引

intmain(){
int t;
cin>>t;
而(t--)
{
ll n;
cin>>n;
ll a,i,c[n];
memset(c,-1,sizeof(c));
堆栈s;
对于(i=0;i>a;
如果(s.empty()){
s、 推动({a,i});
}
否则{
如果(a>s.top().第一个){
而(!s.empty()&&a>s.top().first){
c[s.top().second]=a;
s、 pop();
}
s、 推动({a,i});
}
否则{
s、 推动({a,i});
继续;
}
}
}

对于(i=0;我能更详细地解释这个问题吗?比如你想做什么?谢谢…我只是想知道如何在整个循环中跟踪(存储特定的索引值)…再次感谢。