fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int maxLengthMountain(vector<int>& h) {
  6. int n = h.size();
  7. if (n < 2) {
  8. return n;
  9. }
  10. int max_len = 1;
  11. int left = 0;
  12. while (left < n) {
  13. int right = left;
  14. // 寻找非递减序列
  15. while (right + 1 < n && h[right] < h[right + 1]) {
  16. right++;
  17. }
  18. int mid = right;
  19. // 寻找非递增序列
  20. while (right + 1 < n && h[right] > h[right + 1]) {
  21. right++;
  22. }
  23. // 若存在山峰(mid > left 且 right > mid),则计算长度
  24. if (mid > left && right > mid) {
  25. max_len = max(max_len, right - left + 1);
  26. }
  27. left++;
  28. }
  29. return max_len;
  30. }
  31.  
  32. int main() {
  33. int T;
  34. cin >> T;
  35. while (T--) {
  36. int n;
  37. cin >> n;
  38. vector<int> h(n);
  39. for (int i = 0; i < n; i++) {
  40. cin >> h[i];
  41. }
  42. int max_len = 1;
  43. // 不修改的情况
  44. max_len = max(max_len, maxLengthMountain(h));
  45. // 尝试修改每一个元素
  46. for (int i = 0; i < n; i++) {
  47. int original = h[i];
  48. // 尝试将当前元素修改为不同的值
  49. for (int j = 0; j < n; j++) {
  50. if (i != j) {
  51. h[i] = h[j];
  52. max_len = max(max_len, maxLengthMountain(h));
  53. }
  54. }
  55. h[i] = original;
  56. }
  57. cout << max_len << endl;
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 0.01s 5320KB
stdin
3
5
3 6 2 3 1
6
1 1 4 5 1 4
10
7 8 3 5 6 1 2 4 9 10
stdout
4
4
5