题解 P6334 【[COCI2007-2008#1] SREDNJI】
思路:
这道题目我们可以使用前缀和做,我们记录这些数,比
#include <stdio.h>
int x[100001],ans,s,n,b;
int main()
{
scanf("%d%d",&n,&b);
for(int i=1;i<=n;i++)
{
scanf("%d",&s);
x[i]=x[i-1]+(s>b?1:-1)+(s==b);
}
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j+=2)
ans+=(x[j]-x[i-1]==0);
printf("%d",ans);
return 0;
}
优化:
上面那个代码明显是可以优化的,我们只要
代码:
#include <stdio.h>
int x[200001],y[200001],ans,a,n,b,s;
int main()
{
scanf("%d%d",&n,&b);
y[n]=1;//这里考虑负数,所以n就代表零了,赋初始值
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
s=s+(a>b?1:-1)+(a==b);//判断,如果相等前面部分会将它减一所以还要判断,加回去
if(i%2==0)//上面解释了做法
ans+=x[n+s],y[n+s]++;
else
x[n+s]++,ans+=y[n+s];
}
printf("%d",ans);
return 0;
}