#include<iostream>
using namespace std;
int T,n,a[200010],b[200010];
bool f(int x){
for(int i=3;i<=n;i++){
if(a[i]<x){
return false;
}
int d=min(b[i],a[i]-x)/3;
a[i]-=3*d;
a[i-1]+=d;
a[i-2]+=2*d;
if(a[i]<x){
return false;
}
}
return true;
}
int main(){
cin>>T;
while(T--){
cin>>n;
int maxx=0;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
maxx=max(maxx,a[i]);
}
int l=0,r=maxx*2,mid;
while(l<r){
mid=(l+r+1)/2;
if(f(mid)){
l=mid;
}else{
r=mid-1;
}
}
cout<<l<<endl;
}
return 0;
}
你可以大概讲一下你的想法吗