5 4 0 3 1 2 0 1 0 5 0
2
分析:
把往右的入栈,那么碰到右的就入栈,
如果是左的,就与栈里面的作比较,如果比栈里面的小,鱼总数就减一,
如果比栈里面的大,就把和往左比较的那条鱼出栈。然后鱼数减一;
#include<stdio.h>
#include<stack>
using namespace std;
struct F
{
int x,y;
} a[100010];
int main()
{
int i,j,n;
stack<int>s;
scanf("%d",&n);
int t=n;
for(i=0; i<n; i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
if(a[i].y==1)
s.push(a[i].x);//如果向右就入栈
else
{
while(!s.empty())
{
if(a[i].x>s.top())//如果向左的大于栈中的鱼大小,就把栈里的吃掉
{
s.pop();
t--;
}
else//直到栈中的大于向左的,就把向左的的吃掉
{
t--;
break;
}
}
}
}
printf("%d\n",t);
return 0;
}