problems(cpp): add “1802. Maximum Value at a Given Index in a Bounded Array”
Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
parent
54f486a1b9
commit
ae267fed23
1 changed files with 54 additions and 0 deletions
|
@ -0,0 +1,54 @@
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
long sum(long index, long value, long n)
|
||||||
|
{
|
||||||
|
long count = 0;
|
||||||
|
|
||||||
|
if (value > index) {
|
||||||
|
count += (2 * value - index) * (index + 1) / 2;
|
||||||
|
} else {
|
||||||
|
count += (value + 1) * value / 2 + index - value + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value >= n - index) {
|
||||||
|
count += (2 * value - n + 1 + index) * (n - index) / 2;
|
||||||
|
} else {
|
||||||
|
count += (value + 1) * value / 2 + n - index - value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count - value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
int maxValue(int n, int index, int maxSum)
|
||||||
|
{
|
||||||
|
int left = 1, right = maxSum;
|
||||||
|
|
||||||
|
while (left < right) {
|
||||||
|
int mid = (left + right + 1) / 2;
|
||||||
|
if (sum(index, mid, n) <= maxSum) {
|
||||||
|
left = mid;
|
||||||
|
} else {
|
||||||
|
right = mid - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return left;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Solution s;
|
||||||
|
|
||||||
|
assert(s.maxValue(4, 2, 6) == 2);
|
||||||
|
assert(s.maxValue(6, 1, 10) == 3);
|
||||||
|
|
||||||
|
// regression
|
||||||
|
assert(s.maxValue(6, 2, 931384943) == 155230825);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue