题意:给你每一列的小木块的高度,如果小木块的右边,没有木块,可以向左推动,直到最右边第一个,就不能再往左推动啦。求所有列中最小化的最大的的列高度。
思路:
前缀和来求前i列的所有木块的和,sum [ i ] / i ,向上取整,然后来看最大值,因为每次来看当前的最大高度,就是平均下来。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+9;
ll sum[N];
int main ()
{
ll t;scanf("%lld",&t);
while(t--){
ll n;scanf("%lld",&n);
ll maxx=-1;
for(int i=1;i<=n;i++){
ll x;scanf("%lld",&x);
sum[i]=sum[i-1]+x;//前缀和
ll p=ceil((1.0*sum[i])/i);//向上取整
maxx=max(maxx,p);//最大值
}
cout<<maxx<<endl;
}
return 0;
}