P2866 10分求助
  • 板块题目总版
  • 楼主C202301
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/27 18:57
  • 上次更新2023/11/2 17:50:24
查看原帖
P2866 10分求助
975726
C202301楼主2023/9/27 18:57
#include<iostream>
#include<queue>
using namespace std;
int st[80001],qe[80001];
int main()
{
	int n,q;
	long long I=0;
	cin>>n;
	int top1=0,top2=0;
	queue<int> qu;
	for(int i=1;i<=n;i++)
	{
		cin>>q;
		qu.push(q);
	}
	st[++top1]=qu.front();
	qe[++top2]=0;
	qu.pop();
	while(!qu.empty())
	{
		if(st[top1]>qu.front())
		{
			st[++top1]=qu.front();
			qu.pop();
			for(int i=1;i<=top2;i++)
			qe[i]++;
			qe[++top2]=0;
		}
		else
		{
			while(st[top1]<qu.front())
			{
				I+=qe[top2--];
				top1--;
			}
			st[++top1]=qu.front();
			qu.pop();
			for(int i=1;i<=top2;i++)
			qe[i]++;
			qe[++top2]=0;
		}
	}
	if(top1==1)
	cout<<I;
	else
	cout<<I+1;
	return 0;
}
2023/9/27 18:57
加载中...