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);
}