fork download
  1. #include <iostream>
  2. using namespace std;
  3. #include<vector>
  4. #include <bits/stdc++.h>
  5.  
  6. int main() {
  7. // your code goes here
  8. int n;
  9. cin>>n;
  10. vector<int>arr(n+1);
  11. int i=1;
  12. while(i<=n)
  13. {
  14. cin>>arr[i];
  15. i++;
  16. }
  17.  
  18. //int prefix[n+1]={0};
  19.  
  20. // prefix[0]=0;
  21. // int inc_len=0;
  22. // for(int i=1;i<=n;i++)
  23. // {
  24. // if(arr[i-1]<arr[i])
  25. // {
  26. // prefix[i]=prefix[i-1]+1;
  27. // }
  28. // else
  29. // {
  30. // prefix[i]=1;
  31. // }
  32.  
  33. // inc_len=max(inc_len,prefix[i]);
  34. // //cout<<prefix[i]<<'\n';
  35.  
  36. // }
  37. //cout<<inc_len;
  38.  
  39. int suffix[n+1];
  40. suffix[n]=1;
  41. int dec_len=0;
  42. for(int i=n-1;i>=1;i--)
  43. {
  44. if(arr[i]>arr[i+1])
  45. {
  46. suffix[i]=suffix[i+1]+1;
  47. }
  48. else
  49. {
  50. suffix[i]=1;
  51. }
  52. // cout<<suffix[i]<<'\n';
  53. dec_len=max(dec_len,suffix[i]);
  54. }
  55.  
  56. //cout<<dec_len;
  57.  
  58.  
  59. // largest mountain:
  60.  
  61. //cout<<(inc_len+dec_len-1);
  62.  
  63. //no of mountains whose topmost index is 'i'
  64.  
  65. // int count_mountains=0;
  66. // for(int i=1;i<=n;i++)
  67. // {
  68. // if(prefix[i]>=2&&suffix[i]>=2)
  69. // count_mountains+=(prefix[i]-1)*(suffix[i]-1);
  70. // }
  71.  
  72. // cout<<count_mountains;
  73.  
  74.  
  75. int c=0;
  76. int count_mountains=0;
  77. for(int i=1;i<=n;i++)
  78. {
  79. if(arr[i-1]<arr[i])
  80. {
  81. c++;
  82. }
  83. else
  84. {
  85. c=1;
  86. }
  87.  
  88. if(c>=2&&suffix[i]>=2)
  89. {
  90. count_mountains=(suffix[i]-1)*(c-1);
  91. }
  92. }
  93. cout<<count_mountains;
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100. return 0;
  101. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
1 2 4 2 1
stdout
4