仔细思考之后,由于每次查询操作都只需要最大值,那么只要保证每次出库,我依旧可以找到最大值即可。
也就是说,设置一个二维数组,stack[i,0]代表当前入库的货物重量,stack[i,1]代表这个货物入库之前的货物重量最大值就好了啊!
思路:
读取操作数
如果0
读取重量
比较当前货物重量和最大重量
如果大于,记录入栈之前的最大重量,更新最大值,入栈
如果小于等于,那么记录入栈前的最大重量,入栈
如果1
判断是否top=0
等于0,空的,不操作,continue
不是0,更新最大值,出栈
如果2
直接输出max即可
代码:
#include<stdio.h>
int stack[200005][2]={0},top=0,oprate=0,weight=0,cur_max=0,n=0;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&oprate);
if(oprate==0)//说明入栈操作
{
scanf("%d",&weight);
top++;
stack[top][0]=weight;
stack[top][1]=cur_max;
if(weight>cur_max)
{
cur_max=weight;
}
}
else if(oprate==1)
{
if(top==0)
{
continue;
}
else
{
cur_max=stack[top][1];
top--;
}
}
else if(oprate==2)
{
printf("%d\n",cur_max);
}
}
return 0;
}