给出一个N个整数的序列。我们称高原是这个序列中几个(至少两个)连续元素的子序列,它们具有相同的价值。例如,序列2、4、4、7、3、3、3有两个高原:一个由两个元素组成,另一个由三个元素组成。
找到高原的数量,以及最大和最小的高原中的元素数量。
输入
第一行包含数值N(1≤N≤100000)。第二行包含了序列的元素--不超过106个模数的整数。
输出
输出三个用空格隔开的数字:高原的数量,以及最大和最小的高原中的元素数量。如果没有发现高原反应,则输出三个零。
给出一个N个整数的序列。我们称高原是这个序列中几个(至少两个)连续元素的子序列,它们具有相同的价值。例如,序列2、4、4、7、3、3、3有两个高原:一个由两个元素组成,另一个由三个元素组成。
找到高原的数量,以及最大和最小的高原中的元素数量。
输入
第一行包含数值N(1≤N≤100000)。第二行包含了序列的元素--不超过106个模数的整数。
输出
输出三个用空格隔开的数字:高原的数量,以及最大和最小的高原中的元素数量。如果没有发现高原反应,则输出三个零。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int cnt = 0, max = 0, min = n + 1;
for (int i = 0; i < n - 1; i++)
{
if (arr[i] == arr[i + 1]){
int j = i + 1;
for (; j < n; j++){
if (arr[j] != arr[i]){
cnt++;
if (j - i > max)
max = j - i;
if (j - i < min)
min = j - i;
i = j - 1;
break;
}
}
if (j == n){
cnt ++;
if (j - i > max)
max = j - i;
if (j - i < min)
min = j - i;
break;
}
}
}
if(min == n + 1) min = 0;
cout << cnt << " " << max << " " << min << endl;
return 0;
}