AcWing 1210. 连号区间数
考察:枚举
错误思路:
三层for循环暴力.
做多了区间dp...枚举区间只能想到按长度枚举区间,但这道题不能这么枚举.....
正确思路:
按区间端点来枚举区间,连号区间的特点是最大值-最小值 = 右端点-左端点.随着区间向右边延长,而动态记录最值.
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int N = 10010; 5 int a[N]; 6 int main() 7 { 8 int n,ans = 0; 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 11 for(int i=1;i<=n;i++) 12 { 13 int maxn = 0,minv = N; 14 for(int j=i;j<=n;j++) 15 { 16 maxn = max(maxn,a[j]); 17 minv = min(minv,a[j]); 18 if(maxn-minv==j-i) ans++; 19 } 20 } 21 printf("%d\n",ans); 22 return 0; 23 }