4eyes4u

Untitled

May 1st, 2016
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. typedef long long ll;
  3. using namespace std;
  4.  
  5. const int N=1e5+10;
  6.  
  7. int a[N];
  8. ll dp[3*N];
  9. int n;
  10. ll m, k, sol;
  11.  
  12. inline bool check (ll x)
  13. {
  14.     ll ret=0, xt;
  15.     for (int i=1;i<=n;i++)
  16.     {
  17.         dp[i]+=dp[i-1];
  18.         if (1ll*a[i]+dp[i]>=x) continue;
  19.         xt=x-1ll*a[i]-dp[i];
  20.         dp[i]+=xt;
  21.         dp[i+m]-=xt;
  22.         ret+=xt;
  23.     }
  24.     memset(dp, 0, sizeof dp);
  25.     return (ret<=k);
  26. }
  27.  
  28. inline void solve ()
  29. {
  30.     scanf ("%d%lld%lld", &n, &m, &k);
  31.     sol=1e10;
  32.     for (int i=1;i<=n;i++)
  33.     {
  34.         scanf ("%d", &a[i]);
  35.         sol=min(sol, 1ll*a[i]);
  36.     }
  37.  
  38.     ll l=0, r=1e10, mid;
  39.     while (l<=r)
  40.     {
  41.         mid=(l+r)/2;
  42.         if (check(mid))
  43.         {
  44.             l=mid+1;
  45.             sol=max(mid, sol);
  46.         }
  47.         else r=mid-1;
  48.     }
  49.  
  50.     printf ("%lld\n", sol);
  51. }
  52.  
  53. int main()
  54. {
  55.     int tp;
  56.     cin >> tp;
  57.     while (tp--) solve();
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment