2022AcWing寒假算法每日一题之1904. 奶牛慢跑(单调栈)
题目链接:AcWing1904. 奶牛慢跑
思路:
1.当速度快的奶牛追上速度慢的奶牛时,两头奶牛的速度都变成较慢的那个速度
则考虑单调栈算法,当序列单调非减时,满足条件
2.由于位置按照递增顺序给出,则位置信息无用
具体代码如下:
#include <iostream>
#include <stack>
#include <math.h>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
stack<int>q;//栈
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x,v;
cin>>x>>v;
if(q.empty()||q.top()<=v)//当栈为空,或者栈顶元素较小,则入栈
q.push(v);
else {
while(q.top()>v)//栈顶元素较大,找到栈顶部最小的一个元素
{
q.pop();
if(q.empty())break;//特判:当栈为空,则停止
}
q.push(v);//将小速度入栈
}
}
cout<<q.size()<<endl;//栈中存在的元素个数,即为所求
return 0;
}