题目:http://lx.lanqiao.cn/problem.page?gpid=T30
分析:注意到输入格式里介绍“第二行是N个不同的数字Pi(1 <= Pi <= N)”,这里就可以知道第二行的数由1,2,3······N-1,N组成,虽然此题不用到这个,但以后也要有这个觉悟,阅读题目要仔细,避免题目复杂化。其实这一题,要知道[L, R]是不是连号区间,判断max-min==R-L就可以了(max、min分别是区间[L, R]最大值和最小值)。
如: 1 2 3 4(数组下标)
3 2 1 4(a[i])
区间[1,3]很明显是连号区间(递增排序后连续),此时 max-min=3-1=2,R-L=3-1=2。
代码(c):
#include<stdio.h> int main() { int i,j,n,a[50005],max,min,count=0; scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%d",&a[i]); } for(i=1; i<=n; i++) { max=a[i]; min=a[i]; for(j=i; j<=n; j++) { if(max<a[j]) max=a[j];//max、min分别永远记录最大值和最小值 if(min>a[j]) min=a[j]; if((max-min)==(j-i)) count++; } } printf("%d",count); return 0; }