-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaximizeelement.c
46 lines (33 loc) · 1005 Bytes
/
Maximizeelement.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int maxValue(int n, int index, int maxSum){
int k = index;
long LengthOfRight = n - (k + 1);
long LengthOfLeft = k;
long high = maxSum;
long low = 1;
long res = 0;
while(high >= low)
{
long mid = (high - low) / 2 + low;
long sum = mid;
long SumOfRight = 0;
long SumOfLeft = 0;
long n = mid - 1;
if(LengthOfRight <= n)
SumOfRight = LengthOfRight * (2*n - LengthOfRight + 1) / 2;
else
SumOfRight = n*(n + 1) /2 + (LengthOfRight - n);
if(LengthOfLeft <= n)
SumOfLeft = LengthOfLeft * (2*n - LengthOfLeft + 1) / 2;
else
SumOfLeft = n*(n + 1)/2 + (LengthOfLeft - n);
sum += SumOfRight + SumOfLeft;
if(sum <= maxSum)
{
res = mid;
low = mid + 1;
}
else
high = mid - 1;
}
return res;
}