Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdlib>
- #include<vector>
- #define long long long
- #define nln '\n'
- using namespace std;
- void build(long n, vector<long> &sum, const vector<long> &a)
- {
- for (long i = 1; i <= n; ++i)
- sum[i] = sum[i-1] + a[i];
- }
- long get(long lef, long rig, const vector<long> &sum)
- {
- return sum[rig]-sum[lef-1];
- }
- bool take(long d, long n, const vector<long> &sum, long mav)
- {
- for (long i = 1; i <= n-d+1; ++i)
- if ((long)get(i, i+d-1, sum) > mav)
- return 0;
- return 1;
- }
- int main()
- {
- cin.tie(0)->sync_with_stdio(0);
- cout.tie(0)->sync_with_stdio(0);
- //freopen("ctskietc.inp", "r" , stdin);
- long n, k;
- cin >> n >> k;
- vector<long> a(n+1, 0);
- for (long i = 1; i <= n; ++i)
- cin >> a[i];
- vector<long> sum(n+1, 0);
- build(n, sum, a);
- // Binary search
- long lef = 1, rig = n, res = -1;
- while (lef <= rig){
- long mid = (lef+rig)>>1;
- if (take(mid, n, sum, k)){
- res = mid;
- lef = mid+1;
- }
- else
- rig = mid-1;
- }
- cout << res << nln;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment