Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- typedef long long ll;
- using namespace std;
- const int N=1e5+10;
- int a[N];
- ll dp[3*N];
- int n;
- ll m, k, sol;
- inline bool check (ll x)
- {
- ll ret=0, xt;
- for (int i=1;i<=n;i++)
- {
- dp[i]+=dp[i-1];
- if (1ll*a[i]+dp[i]>=x) continue;
- xt=x-1ll*a[i]-dp[i];
- dp[i]+=xt;
- dp[i+m]-=xt;
- ret+=xt;
- }
- memset(dp, 0, sizeof dp);
- return (ret<=k);
- }
- inline void solve ()
- {
- scanf ("%d%lld%lld", &n, &m, &k);
- sol=1e10;
- for (int i=1;i<=n;i++)
- {
- scanf ("%d", &a[i]);
- sol=min(sol, 1ll*a[i]);
- }
- ll l=0, r=1e10, mid;
- while (l<=r)
- {
- mid=(l+r)/2;
- if (check(mid))
- {
- l=mid+1;
- sol=max(mid, sol);
- }
- else r=mid-1;
- }
- printf ("%lld\n", sol);
- }
- int main()
- {
- int tp;
- cin >> tp;
- while (tp--) solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment