fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define endl '\n'
  4. #define int long long int
  5. const int MOD = 1000000007;
  6. const int MOD2 = 998244353;
  7. const int INF = LLONG_MAX / 2;
  8. const int MAXN = 100000;
  9. int primes[1000000];
  10.  
  11. /*void seive() {
  12.   fill(primes, primes + 1000000, 1);
  13.   primes[0] = primes[1] = 0;
  14.   for (int i = 2; i * i < 1000000; i++) {
  15.   if (primes[i]) {
  16.   for (int j = i * i; j < 1000000; j += i) {
  17.   primes[j] = 0;
  18.   }
  19.   }
  20.   }
  21. }
  22.  
  23. bool isPrime(int n) {
  24.   if (n <= 1) return false;
  25.   for (int i = 2; i * i <= n; i++) {
  26.   if (n % i == 0) return false;
  27.   }
  28.   return true;
  29. }
  30.  
  31. int gcd(int a, int b) {
  32.   if (a == 0) return b;
  33.   return gcd(b % a, a);
  34. }
  35.  
  36. int power(int a, int b, int mod) {
  37.   int res = 1;
  38.   a %= mod;
  39.   while (b > 0) {
  40.   if (b & 1) res = res * a % mod;
  41.   a = a * a % mod;
  42.   b >>= 1;
  43.   }
  44.   return res;
  45. }
  46.  
  47. // nCr % MOD for n < MOD
  48. int nCrModP(int n, int r) {
  49.   if (r > n) return 0;
  50.   if (r == 0 || r == n) return 1;
  51.  
  52.   int numerator = 1, denominator = 1;
  53.   for (int i = 0; i < r; i++) {
  54.   numerator = (numerator * (n - i)) % MOD;
  55.   denominator = (denominator * (i + 1)) % MOD;
  56.   }
  57.   return (numerator * power(denominator, MOD - 2, MOD)) % MOD;
  58. }
  59.  
  60. // Lucas's Theorem
  61. int lucas(int n, int r) {
  62.   if (r == 0) return 1;
  63.   return (lucas(n / MOD, r / MOD) * nCrModP(n % MOD, r % MOD)) % MOD;
  64. }*/
  65. void solve() {
  66. int n;
  67. cin>>n;
  68. int A[n];
  69. for(int i = 0 ; i<n ; i++){
  70. cin>>A[i];
  71. }
  72. int ans1 = LLONG_MIN,ans2=LLONG_MIN,ans3=LLONG_MIN,ans4=LLONG_MIN;
  73. int maxi = LLONG_MIN,mini1 = LLONG_MAX,mini2=LLONG_MAX;
  74. int p = -1;
  75. for(int i = 0 ; i<n ; i++){
  76. maxi = max(maxi,(A[i]+i));
  77. }
  78. for(int i = 0 ; i<n ; i++){
  79. int d = A[i]+i;
  80. if(d<mini1){
  81. p = i;
  82. mini1 = d;
  83. }
  84. }
  85. ans1 = max(ans1,(maxi-(2*mini1)));
  86. maxi = LLONG_MIN,mini1 = LLONG_MIN,mini2=LLONG_MIN;
  87. for(int i = 0 ; i<n ; i++){
  88. maxi = max(maxi,(i-A[i]));
  89. }
  90. for(int i = 0 ; i<n ; i++){
  91. int d = A[i]-i;
  92. if(d>mini1){
  93. mini1 = d;
  94. }
  95. }
  96. ans2 = max(ans2,(maxi+(2*mini1)));
  97. p = -1;
  98. maxi = LLONG_MIN,mini1 = LLONG_MIN,mini2=LLONG_MIN;
  99. for(int i = 0 ; i<n ; i++){
  100. maxi = max(maxi,(A[i]-i));
  101. }
  102. for(int i = 0 ; i<n ; i++){
  103. int d = i-A[i];
  104. if(d>mini1){
  105. mini1 = d;
  106. }
  107. }
  108. ans3 = max(ans3,(maxi+(2*mini1)));
  109. mini1 = LLONG_MIN,mini2 = LLONG_MIN;
  110. maxi = LLONG_MAX;
  111. for(int i = 0 ; i<n ; i++){
  112. maxi = min(maxi,(A[i]+i));
  113. }
  114. for(int i = 0 ; i<n ; i++){
  115. int d = A[i]+i;
  116. if(d>mini1){
  117. mini1 = d;
  118. }
  119. }
  120. ans4 = max(ans4,((2*mini1)-maxi));
  121. cout<<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<endl;
  122. cout<<max({ans1,ans2,ans3,ans4})<<endl;
  123. }
  124. signed main() {
  125. ios::sync_with_stdio(false); cin.tie(NULL);
  126. //int t;
  127. //cin >> t;
  128. //while (t--) {
  129. solve();
  130. //}
  131. return 0;
  132. }
  133.  
Success #stdin #stdout 0s 5328KB
stdin
5
1 2 3 4 5
stdout
7 1 -1 17
17