从这题学到一点东西:
LSS大神告诉我 设max为区间【L,R】之间的最大值,min为最小值,当max-min= R-L 时,区间符合条件
PS: 感脚这个好吊,可惜我没想到,我想的是定义一个flag 表示判断区间【L,R】缺少min-max之间的数的数目。 还因为在flag=0 的时候ans没有加1错了。。。。
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<limits.h>
using namespace std;
int a[50010];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i= 1; i<= n; i++)
scanf("%d",&a[i]);
int ans= 0;
for(int i= 1; i<= n; i++)
{
int max= a[i];
int min= a[i];
for(int j= i; j<= n; j++)
{
if(a[j] > max)
max= a[j];
if(a[j] < min)
min= a[j];
if( (max-min) == (j-i) )
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}