Submission #171799

#TimeUsernameProblemLanguageResultExecution timeMemory
171799nickmet2004Rice Hub (IOI11_ricehub)C++11
0 / 100
6 ms760 KiB
#include<bits/stdc++.h> using namespace std; int l; vector<int> f; void update(int idx , int d){ ++idx; while(idx <= l){ f[idx] += d; idx += idx & (-idx); } } int sum(int idx){ long long sum = 0; while(idx){ sum += f[idx]; idx -= idx & (-idx); } return sum; } int pos , flag , cur_rice; void Find(int l , int r , long long B){ int mid = (l + r) >> 1; int how_many = sum(r) - sum(l - 1); if(how_many * mid <= B && !flag){ if(how_many > cur_rice){ pos = mid; cur_rice = how_many; } return; } int left_side = sum(mid) - sum(l - 1); int right_side = sum(r) - sum(mid - 1); if(left_side < right_side){ Find(mid + 1 , r , B); } else if(right_side < left_side){ Find(l , mid - 1 , B); } else { Find(l , mid - 1 , B); Find(mid + 1 , r , B); } } int besthub(int R , int L , int X[] , long long B){ l = L; int mx = -1; for(int i = 0; i < R; ++i){ update(X[i] , 1); mx = max(mx , X[i]); } Find(0 , mx , B); return pos; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...