Luogu P1823 [COI2007] Patrik 音樂會的等待

Luogu P1823 [COI2007] Patrik 音樂會的等待


做一套初賽模擬題,填程序是這個
就順便找原題做一下
:單調棧

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

#define ll long long

int line[10010],value[10010];
int cnt=0,n;
ll ans=0;

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		if(x<line[cnt])
		{
			cnt++;
			line[cnt]=x;
			value[cnt]=1;
			ans+=1;//相鄰兩個!! 
		}
		else
		{
			ll sum=0;
			while(cnt&&line[cnt]<x)
			{
				ans+=(ll)value[cnt];
				cnt--;	
			} 
			while(cnt&&line[cnt]==x)
			{
				sum+=(ll)value[cnt];
				cnt--;
			}
			if(cnt>0)ans+=1;
			ans+=sum;
			cnt++;
			line[cnt]=x;
			value[cnt]=sum+1;
		}
	}
	printf("%lld",ans);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章