Submission #651494

#TimeUsernameProblemLanguageResultExecution timeMemory
651494andrei_boacaRice Hub (IOI11_ricehub)C++14
100 / 100
18 ms3328 KiB
#include <bits/stdc++.h>
#include "ricehub.h"
//#include "grader.cpp"
typedef long long ll;
ll n,m,maxi,v[200005],s[200005];
bool check(int i,int j,int poz)
{
    if(poz<i||poz>j)
        return 0;
    ll inlft=(poz-i+1);
    ll slft=s[poz]-s[i-1];
    ll suma=0;
    suma+=inlft*v[poz]-slft;

    ll inrgt=(j-poz+1);
    ll srgt=s[j]-s[poz-1];
    suma+=srgt-inrgt*v[poz];
    return suma<=maxi;
}
bool ok(int lg)
{
    for(int i=1;i<=n;i++)
    {
        int j=i+lg-1;
        if(j>n)
            break;
        int mij=(i+j)/2;
        for(int poz=mij-1;poz<=mij+1;poz++)
            if(check(i,j,poz))
                return 1;
    }
    return 0;
}
int besthub(int R, int L, int X[], long long B)
{
    n=R;
    m=L;
    maxi=B;
    for(int i=0;i<n;i++)
        v[i+1]=X[i];
    for(int i=1;i<=n;i++)
        s[i]=s[i-1]+v[i];
    int ans=0;
    int st=1;
    int dr=n;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(ok(mij))
        {
            ans=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...