第1行:1個數N,表示魚的數量(1 <= N <= 100000)。 第2 - N + 1行:每行兩個數A[i], B[i],中間用空格分隔,分別表示魚的大小及遊動的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1,0表示向左,1表示向右)。
輸出1個數,表示最終剩下的魚的數量。
5 4 0 3 1 2 0 1 0 5 0
2
題解:從最左邊的魚開始循環當遇到向右遊的魚就入棧。遇到向左遊的魚且有向右遊的魚就比較。左遊的魚大就出棧魚總數減一,右遊的大就結束此次比較且魚總數減一
#include<bits/stdc++.h>
using namespace std;
#define M 100005
long n;
struct node{
long body,diretion;
}a[M];
stack <int > st1;
int main()
{
cin>>n;
long ans=n;
for(long i=0; i<n; i++)
cin>>a[i].body>>a[i].diretion;
for(long i=0; i<n; i++){//從最左邊的魚開始
if(a[i].diretion==1){//遇到向右遊的魚就如棧
st1.push(a[i].body);
}
if(a[i].diretion!=1&&!st1.empty()){//遇到向左遊的魚且有向右遊的魚就比較
while(!st1.empty()){
if(a[i].body>st1.top())
{
st1.pop();
ans--;
}
else{
ans--;
break;
}
}
}
}
cout<<ans;
return 0;
}