This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
#define ins insert
#define pb push_back
// #define int long long int
#define pii pair<int, int>
#define endl '\n'
#define drop(x) cout<<(x)<<endl; return;
#define all(x) x.begin(),x.end()
int besthub(int R, int L, int arr[], long long B){
/*
    dusun:
        hemise hansisa arr[i] e qoymaq mentiqlidi,
        binary search atib, i - j arasina gore j' - i arasini calclamaq?
            i nen j olsa, i<j'<j lerin hamisini nece costa i ye getirerik?
                arr[j']-arr[i]
                0 2 
                arr[j'+1] - arr[i] = arr[j'] -  arr[i] + (arr[j'+1]-arr[j'])
                arr[j' +2] - arr[i] = arr[j'] - arr[i] + (arr[j'+1]-arr[j']) + (arr[j'+2]-arr[j'+1])
                (arr[j'+1]-arr[j']) x (j-i)
                (arr[j'+2]-arr[j'+1]) x (j-i-1) = arr[j']
                i->j  : (arr[j'] - arr[i])*(j-i) + 
                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                (pref[r] - pref[l]) - ( arr[i] - arr[0] * (r-l) )
*/
    int anstot=1;
    int n = R;
    map<int,int> var;
    // vector<int> pref(R+1,0);
    // for(int i=0;i<n;i++){
    //     pref[i]=arr[i] - arr[0];
    //     if(i){
    //         pref[i]+=pref[i-1];
    //     }
    //     var[arr[i]]++;
    //     anstot= max(anstot,var[arr[i]]);
    // }
    int ans=0;
    map<int,int> comp;
    for(int i=0;i<n;i++){
        comp[arr[i]]++;
        ans=max(ans,comp[arr[i]]);
    }
    int cnt=1;
    for(auto& v:comp){
        v.second = (cnt++);
    }
    int l =1;
    int r = 1e9;
    while(l<=r){
        int mid = (l+r)/2;
        multiset<pair<int,int>> lst;
        int lq=0;
        int rq=0;
        for(int i=0;i<n;i++){
            lst.ins({abs(arr[i]-mid),i});
        }
        int cnt=0;
        for(auto v:lst){
            if(B-v.first<0){
                break;
            }
            if(abs(v.first+mid  - (mid-1))> v.first){
                lq++;
            }
            else if(abs(v.first+mid  - (mid-1))> v.first){
                lq--;
            }
            if(abs(v.first+mid - (mid+1))>v.first){
                rq++;
            }
            else if(abs(v.first+mid  - (mid+1))> v.first){
                rq--;
            }
            ++cnt;
            B-=v.first;
        }
        ans=max(ans,cnt);
        if(lq==rq){
            int a=0;
            int b= 0;
            for(int i=0;i<n;i++){
                if(abs(arr[i]-(mid-1))<abs(arr[i]-(mid+1))){
                    a++;
                }
                else if(abs(arr[i]-(mid-1))>abs(arr[i]-(mid+1))){
                    b++;
                }
            }
            if(a>=b){
                r=mid-1;
            }
            else{
                l=mid+1;
            }
        }
        else{
            if(lq>rq){
                r=mid-1;
            }
            else{
                l=mid+1;
            }
        }
    } 
    // cout<<ans<<endl;
    // anstot=ans;
    return ans;
}
Compilation message (stderr)
ricehub.cpp: In function 'int besthub(int, int, int*, long long int)':
ricehub.cpp:37:9: warning: unused variable 'anstot' [-Wunused-variable]
   37 |     int anstot=1;
      |         ^~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |