Advertisement
tepyotin2

Running Miles

Jun 20th, 2025
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. struct Pos{
  8.     ll val;
  9.     int pos;
  10. };
  11.  
  12. int t;
  13.  
  14. int main(){
  15.     freopen("runningmiles.in", "r", stdin);
  16.    
  17.     cin >> t;
  18.     while(t--){
  19.         int n;
  20.         cin >> n;
  21.         vector<ll> left(n);
  22.         vector<ll> right(n);
  23.         vector<ll> arr(n);
  24.         for(int i=0; i<n; i++){
  25.             cin >> arr[i];
  26.         }
  27.         vector<ll> l(n);
  28.         vector<ll> r(n);
  29.         for(int i=0; i<n; i++){
  30.             l[i] = arr[i]-(n-i-1);
  31.             r[i] = arr[i]-i;
  32.         }
  33.         left[0] = l[0];
  34.         //left[0].pos = 0;
  35.         for(int i=1; i<n; i++){
  36.             left[i] = max(left[i-1], l[i]);
  37.             //if(arr[i]>left[i-1].val){
  38.                 //left[i].val = arr[i];
  39.                 //left[i].pos = i;
  40.             //}else if(arr[i] == left[i-1].val){
  41.                 //left[i].val = arr[i];
  42.                 //left[i].pos = i;
  43.             //}else{
  44.                 //left[i].val = left[i-1].val;
  45.                 //left[i].pos = left[i-1].pos;
  46.             //}
  47.         }
  48.         right[n-1] = r[n-1];
  49.         //right[n-1].pos = n-1;
  50.         for(int i=n-2; i>=0; i--){
  51.             right[i] = max(right[i+1], r[i]);
  52.             //if(arr[i]>right[i+1].val){
  53.                 //right[i].val = arr[i];
  54.                 //right[i].pos = i;
  55.             //}else if(arr[i] == right[i+1].val){
  56.                 //right[i].val = arr[i];
  57.                 //right[i].pos = i;
  58.             //}else{
  59.                 //right[i].val = right[i+1].val;
  60.                 //right[i].pos = right[i+1].pos;
  61.             //}
  62.         }
  63.         ll ans = 0;
  64.         for(int i=1; i<n-1; i++){
  65.             ans = max(ans, left[i-1]+arr[i]+right[i+1]+n-1);
  66.             //cout << "left[i-1]: " << left[i-1] << ", arr[i]: " << arr[i] << ", right[i+1]: " << right[i+1] << '\n';
  67.             //cout << "left[i-1].val: " << left[i-1].val << ", left[i-1].pos: " << left[i-1].pos << '\n';
  68.             //cout << "arr[i]: " << arr[i] << ", i: " << i << '\n';
  69.             //cout << "right[i+1].val: " << right[i+1].val << ", right[i+1].pos: " << right[i+1].pos << '\n';
  70.             //cout << "============" << '\n';
  71.         }
  72.         cout << ans << '\n';
  73.     }
  74.    
  75.     return 0;
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement