fork download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std ;
  4. using ll = long long ;
  5.  
  6. ll min_start_val, gap ;
  7. ll a[100005], n ;
  8.  
  9. void bs(){
  10.  
  11. ll mx = 0 ;
  12. for(int i = 0 ; i < n ; i++) mx = max(a[i], mx) ;
  13.  
  14. ll lo = 0, hi = mx ;
  15.  
  16. while(hi-lo > 1){
  17.  
  18. ll mid = (hi + lo) >> 1 ;
  19.  
  20. bool flag = 1 ;
  21. ll req = 1 ;
  22. for(ll i = 0 ; i < n ; i++, req += mid)
  23. if(a[i] < req){
  24. flag = 0 ;
  25. break ;
  26. }
  27.  
  28. if(flag) lo = mid ;
  29. else hi = mid ;
  30.  
  31. }
  32.  
  33. ll req = 1LL, mindiff = mx ;
  34. for(ll i = 0 ; i < n ; i++, req += lo)
  35. mindiff = min(mindiff, a[i] - req) ;
  36.  
  37. min_start_val = mindiff + 1 ;
  38. gap = lo ;
  39.  
  40. }
  41.  
  42. void solve(){
  43.  
  44. cin >> n ;
  45. for(int i = 0 ; i < n ; i++) cin >> a[i] ;
  46.  
  47. bs() ;
  48.  
  49. cout << gap << " " << min_start_val << "\n" ;
  50.  
  51. }
  52.  
  53. int main(){
  54.  
  55. #ifndef ONLINE_JUDGE
  56. freopen("sample input.txt", "r", stdin) ;
  57. freopen("output.txt", "w", stdout) ;
  58. #endif
  59.  
  60. ios::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ;
  61.  
  62. int t ; cin >> t ;
  63. while(t--) solve() ;
  64.  
  65. return 0 ;
  66. }
  67.  
Success #stdin #stdout 0s 16016KB
stdin
4
3
1 2 3
3
5 4 3
3
200 150 100
1
8
stdout
1 1
1 1
49 2
7 8