fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int sub2 (const vector<int> &a) {
  5. // O(n ^ 2)
  6. int ans = 0, n = a.size();
  7. for (int i = 1; i <= n; ++i) {
  8. int minVal = a[i + 1];
  9. for (int j = i + 2; j <= n; ++j) {
  10. if (minVal <= min(a[i], a[j])) {
  11. ans = max(ans, (a[i] - minVal) + (a[j] - minVal));
  12. }
  13. minVal = min(minVal, a[j]);
  14. }
  15. }
  16. return ans;
  17. }
  18.  
  19. int sub3 (const vector<int> &a) {
  20. int n = a.size();
  21. vector<int> maxLeft(n + 2), maxRight(n + 2);
  22. for (int i = 1; i <= n; ++i)
  23. {
  24. maxLeft[i] = max(maxLeft[i - 1], a[i]);
  25. }
  26. for (int i = n; i >= 1; --i)
  27. {
  28. maxRight[i] = max(maxRight[i + 1], a[i]);
  29. }
  30.  
  31. int ans = -1;
  32. for (int i = 2; i < n; ++i)
  33. {
  34. int left = maxLeft[i - 1];
  35. int right = maxRight[i + 1];
  36. if (a[i] <= min(left, right))
  37. {
  38. ans = max(ans, left + right - 2 * a[i]);
  39. }
  40. }
  41.  
  42. return ans;
  43. }
  44.  
  45. int main()
  46. {
  47. ios_base::sync_with_stdio(false);
  48. cin.tie(0);
  49. cout.tie(0);
  50. // freopen("TRIPLE.INP", "r", stdin);
  51. // freopen("TRIPLE.OUT", "w", stdout);
  52.  
  53. int n;
  54. cin >> n;
  55.  
  56. vector<int> a(n + 1);
  57. for (int i = 1; i <= n; ++i)
  58. {
  59. cin >> a[i];
  60. }
  61.  
  62. cout << sub2(a) << ' ' << sub3(a) << '\n';
  63.  
  64. return 0;
  65. }
  66.  
Success #stdin #stdout 0.48s 5288KB
stdin
Standard input is empty
stdout
0 0