题目翻译
输入一个长度为 $n$ 个数字,还有 $X$ 和 $Y$。
问数组中有几个区间最大值是 $X$ 且最小值是 $Y$。
题目思路
所有数字分为 $a_i>Y$,$a_i=Y$,$a_i<X$,$a_i=X$,$X<a_i<Y$ 五种情况。
$>Y$ 和 $<X$ 的位置一定不能选。
选一个区间,包含至少一个 $=Y$,包含至少一个 $=X$,问有多少种方案。
问以每个位置作为结尾,有多少个方案。
对于每个位置,找自己之前的最近的 $X$ 是多少,最近的 $Y$ 是多少,至多选多少个数字没有 $>Y$ 和 $<X$ 的情况。
主要代码
void solve()
{
int n,x,y,maxxid=0,minnid=0,la=1;
long long ans=0;
cin>>n>>x>>y;
for(int i=1;i<=n;i++)
{
int z;
cin>>z;
if(z==x)
{
maxxid=i;
}
if(z==y)
{
minnid=i;
}
if(z>x||z<y)
{
maxxid=0;
minnid=0;
la=i+1;
}
if(maxxid!=0&&minnid!=0)
{
ans+=min(maxxid,minnid)-la+1;
}
}
cout<<ans<<endl;
}