0
点赞
收藏
分享

微信扫一扫

【51nod】扔盘子【单调栈】

小云晓云 2022-01-15 阅读 74

在这里插入图片描述

分析

先考虑井的形状,因为下面的会卡在上面,所以井的形状可以处理为单调不增的。

然后每放进一个盘子,就判断它能把几个位置弹出并占据。答案加上1,直到栈空。

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<stack>
using namespace std;

int n,m,a[100001],b[100001],ans;

stack<int> st;

int main()
{
	cin>>n>>m;
	int mn=2147483647;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		mn=a[i]=min(a[i],mn);
		st.push(a[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&b[i]);
	}
	int i=1;
    while(!st.empty()&&i<m)
    {
    	if(b[i]>st.top())
    	{
    		st.pop();
    		continue;
		}
		ans++;
		st.pop();
		i++;
	}
	cout<<ans;
	return 0;
} 
举报

相关推荐

0 条评论