1 /**\
2 https://codeforces.com/problemset/problem/1623/C
3 核心代码:运过来的石子够mid个,将a[i]全部甩过去,不然就把多出来的分到后面
4 int add = min(a[i], aa[i] - x) / 3;
5 \**/
6 #include <bits/stdc++.h>
7 using namespace std;
8 #define fi first
9 #define se second
10 #define go continue
11 #define int long long
12 #define PII pair<int, int>
13 #define sf(x) scanf("%lld",&x)
14 #define ytz int _; sf(_); while(_--)
15 #define fory(i,a,b) for(int i = a; i <= b; ++i)
16 #define forl(i,a,b) for(int i = a; i >= b; --i)
17 #define debug(a) cout << #a << " = " << a <<endl;
18 const int N = 2e5 + 10;
19 int n, a[N], aa[N];
20 bool check(int x)
21 {
22 fory(i, 1, n) aa[i] = a[i];
23 for(int i = n; i >= 3; --i)
24 {
25 if(aa[i] < x) return false;
26
27 int add = min(a[i], aa[i] - x) / 3;
28 aa[i - 1] += add;
29 aa[i - 2] += add * 2;
30 }
31 if(aa[1] < x || aa[2] < x) return false;
32 return true;
33 }
34 signed main()
35 {
36 ytz
37 {
38 sf(n);
39 fory(i, 1, n) sf(a[i]);
40 int l = 1, r = 1e9;
41 while(l < r)
42 {
43 int mid = (l + r + 1) >> 1;
44 if(check(mid)) l = mid;
45 else r = mid - 1;
46 }
47 printf("%lld\n", l);
48 }
49 return 0;
50 }