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