In this HackerEarth Help, Fredo problem solution Fredo is assigned a task today. He is given an array A containing N integers. His task is to update all elements of array to some minimum value x, that is, A[i] = x; 1 <= i <= N such that product of all elements of this new array is strictly greater than the product of all elements of the initial array. Note that x should be as minimum as possible such that it meets the given condition. Help him find the value of x.
HackerEarth Help Fredo with problem solution.
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
ll a[100005];
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
assert(a[i]>=1 && a[i]<=1e10);
}
sort(a,a+n);
ld val=0;
for (int i=0;i<n;i++)
val+= (ld)(log((ld)(a[i])));
ll left=a[0],right=a[n-1]+1,ans;
while(left<=right)
{
ll mid=(left+right)/2;
ld temp= (ld)n * (ld)(log((ld)(mid)));
if(val < temp)
{
ans=mid;
right=mid-1;
}
else
left=mid+1;
}
cout<<ans<<"n";
return 0;
}