【发布时间】:2019-04-02 05:03:53
【问题描述】:
Q.)你得到一个大小和查询的数组。对于每个查询,您将获得数组的两个索引和 .从 to 生成的子数组是反转的。你的任务是确定子数组的最大和。
例如: 5 2 3 -1 4 2 -1 3 4 1 2 该输入的输出为 8 9。 作为: 给定数组是 {3,-1,4,2,-1}。
对于第一个查询 L=3 和 R=4。现在数组变为 {3,-1,2,4,-1}。
最大子数组和为8,子数组为{3,-1,2,4}。
对于第二个查询 L=1 和 R=2。现在数组变为 {-1,3,4,2,-1}。
最大子数组和为9,子数组为{3,4,2}。
#include <iostream>
#include<stack>
using namespace std;
void Reverse(int *a,int l,int r)
{
stack<int>s;
int i;
for(i=l;i<=r;i++)
{
s.push(*(a+i));
}
for(i=l;i<=r;i++)
{
*(a+i)=s.pop();
}
//return(1);
}
int main() {
int n,q;
cin>>n>>q;
int a[n];
int i;
for(i=0;i<n;i++)
{
cin>>a[i];
}
while(q)
{
q--;
int l,r;
cin>>l>>r;
Reverse(a,l-1,r-1);
}
for(i=0;i<n;i++)
{
cout<<a[i];
}
}
我在 *(a+i)=s.pop(); 处遇到错误有人可以向我解释为什么会发生此错误以及删除它的方法。 任何帮助,将不胜感激。 PS:我知道这不是问题的完整解决方案。
【问题讨论】:
-
std::stack::pop不返回任何内容(返回void),但您正在尝试将其分配给一个值。你的意思是*(a+i)=s.top(); s.pop ();?
标签: c++ arrays data-structures stack