Submission #207538

#TimeUsernameProblemLanguageResultExecution timeMemory
207538robsRice Hub (IOI11_ricehub)C++17
68 / 100
22 ms1528 KiB
#include "ricehub.h" #include <bits/stdc++.h> #define debug(args...) //fprintf(stderr, args) typedef long long int lli; using namespace std; const int maxn = 2e5; int s[maxn],cs[maxn],I,J,SUM; int besthub(int R, int L, int X[], long long int B) { s[0] = X[0]; // debug("R-1 = %d\n",R-1); for(int x = 1; x < R; x++) s[x] = s[x-1] + X[x]; for(int x = 0; x < R; x++) // debug("s[%d] = %d | d = %d\n",x,s[x],X[x]); cs[R-1] = 0; // debug("\n"); for(int x = R-2; x >= 0; x--) cs[x] = cs[x+1] + X[R-1] - X[x]; // for(int x = 0; x < R; x++) // debug("cs[%d] = %d | d = %d\n",x,cs[x],X[R-1]-X[x]); // debug("\n\n"); int i = 0; int j = 0; lli resp = 0; while(j < R) { int med = (i + j) / 2; lli sumEsq = (cs[i] - cs[med]) - ((med - i)*(X[R-1] - X[med])); // debug("%d - %d:\nsumEsq = %d = (%d-%d) - ((%d-%d)*(%d-%d))\n",i,j,sumEsq,cs[i],cs[med],med,i,X[R-1],X[med]); lli sumDir = (s[j] - s[med]) - ((j - med)*X[med]); // debug("sumDir = %d = (%d-%d) - ((%d-%d)*(%d-%d))\n",sumDir,s[j],s[med],j,med,X[med],X[0]); lli sum = sumEsq + sumDir; lli r = j - i + 1; // debug("%d - %d(%d) %d %d -%d-\n\n",i,j,sum,sumEsq,sumDir,med); if(sum <= B) { resp = max(resp, r); j++; } else if(i == j) { j++; } else i++; } return resp; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...