#include <bits/stdc++.h>
using namespace std;
// Function to find maximum product of two integers in an array
void findMaximumProduct(int arr[], int n)
{
// Find maximum and second maximum element in an array
int max1 = arr[0], max2 = INT_MAX;
// Find minimum and second minimum element in an array
int min1 = arr[0], min2 = INT_MAX;
// Traverse an array one time to find max1 , max2 , min1 , min2
for (int i = 1; i < n; i++)
{
// if current element is more than the maximum element,
// update maximum and second maximum element
if (arr[i] > max1)
{
max2 = max1;
max1 = arr[i];
}
// if current element is less than maximum but greater than second
// maximum element, update second maximum element
else if (arr[i] > max2)
{
max2 = arr[i];
}
// else ignore the element
// if current element is more than the minimum element,
// update minimum and second minimum element
if (arr[i] < min1)
{
min2 = min1;
min1 = arr[i];
}
// if current element is less than minimum but greater than second
// minimum element, update second minimum element
else if (arr[i] < min2)
min2 = arr[i];
// else ignore the element
}
// Maximum product is formed by maximum of
// 1. product of maximum and second maximum element or
// 2. product of minimum and second minimum element
if (max1 * max2 > min1 * min2)
printf("Pair is (%d, %d)", max1, max2);
else
printf("Pair is (%d, %d)", min1, min2);
}
// main function
int main()
{
int arr[] = { -10, -3, 5, 6, -2 };
int n = sizeof(arr) / sizeof(arr[0]);
findMaximumProduct(arr, n);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLy8gRnVuY3Rpb24gdG8gZmluZCBtYXhpbXVtIHByb2R1Y3Qgb2YgdHdvIGludGVnZXJzIGluIGFuIGFycmF5CnZvaWQgZmluZE1heGltdW1Qcm9kdWN0KGludCBhcnJbXSwgaW50IG4pCnsKICAgIC8vIEZpbmQgbWF4aW11bSBhbmQgc2Vjb25kIG1heGltdW0gZWxlbWVudCBpbiBhbiBhcnJheQogICAgaW50IG1heDEgPSBhcnJbMF0sIG1heDIgPSBJTlRfTUFYOwoKICAgIC8vIEZpbmQgbWluaW11bSBhbmQgc2Vjb25kIG1pbmltdW0gZWxlbWVudCBpbiBhbiBhcnJheQogICAgaW50IG1pbjEgPSBhcnJbMF0sIG1pbjIgPSBJTlRfTUFYOwogCiAKCS8vIFRyYXZlcnNlIGFuIGFycmF5IG9uZSB0aW1lIHRvIGZpbmQgbWF4MSAsIG1heDIgLCBtaW4xICwgbWluMgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgLy8gaWYgY3VycmVudCBlbGVtZW50IGlzIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBlbGVtZW50LAogICAgICAgIC8vIHVwZGF0ZSBtYXhpbXVtIGFuZCBzZWNvbmQgbWF4aW11bSBlbGVtZW50CiAgICAgICAgaWYgKGFycltpXSA+IG1heDEpCiAgICAgICAgewogICAgICAgICAgICBtYXgyID0gbWF4MTsKICAgICAgICAgICAgbWF4MSA9IGFycltpXTsKICAgICAgICB9CiAKICAgICAgICAvLyBpZiBjdXJyZW50IGVsZW1lbnQgaXMgbGVzcyB0aGFuIG1heGltdW0gYnV0IGdyZWF0ZXIgdGhhbiBzZWNvbmQKICAgICAgICAvLyBtYXhpbXVtIGVsZW1lbnQsIHVwZGF0ZSBzZWNvbmQgbWF4aW11bSBlbGVtZW50CiAgICAgICAgZWxzZSBpZiAoYXJyW2ldID4gbWF4MikKICAgICAgICB7CiAgICAgICAgICAgIG1heDIgPSBhcnJbaV07CiAgICAgICAgfQogCiAgICAgICAgLy8gZWxzZSBpZ25vcmUgdGhlIGVsZW1lbnQKCiAgICAgICAgLy8gaWYgY3VycmVudCBlbGVtZW50IGlzIG1vcmUgdGhhbiB0aGUgbWluaW11bSBlbGVtZW50LAogICAgICAgIC8vIHVwZGF0ZSBtaW5pbXVtIGFuZCBzZWNvbmQgbWluaW11bSBlbGVtZW50CiAgICAgICAgaWYgKGFycltpXSA8IG1pbjEpCiAgICAgICAgewogICAgICAgICAgICBtaW4yID0gbWluMTsKICAgICAgICAgICAgbWluMSA9IGFycltpXTsKICAgICAgICB9CiAKICAgICAgICAvLyBpZiBjdXJyZW50IGVsZW1lbnQgaXMgbGVzcyB0aGFuIG1pbmltdW0gYnV0IGdyZWF0ZXIgdGhhbiBzZWNvbmQKICAgICAgICAvLyBtaW5pbXVtIGVsZW1lbnQsIHVwZGF0ZSBzZWNvbmQgbWluaW11bSBlbGVtZW50CiAgICAgICAgZWxzZSBpZiAoYXJyW2ldIDwgbWluMikKICAgICAgICAgICAgbWluMiA9IGFycltpXTsKIAogICAgICAgIC8vIGVsc2UgaWdub3JlIHRoZSBlbGVtZW50CiAgICB9CiAKCiAgICAvLyBNYXhpbXVtIHByb2R1Y3QgaXMgZm9ybWVkIGJ5IG1heGltdW0gb2YKICAgIC8vIDEuIHByb2R1Y3Qgb2YgbWF4aW11bSBhbmQgc2Vjb25kIG1heGltdW0gZWxlbWVudCBvcgogICAgLy8gMi4gcHJvZHVjdCBvZiBtaW5pbXVtIGFuZCBzZWNvbmQgbWluaW11bSBlbGVtZW50CiAgICBpZiAobWF4MSAqIG1heDIgPiBtaW4xICogbWluMikKICAgICAgICBwcmludGYoIlBhaXIgaXMgKCVkLCAlZCkiLCBtYXgxLCBtYXgyKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlBhaXIgaXMgKCVkLCAlZCkiLCBtaW4xLCBtaW4yKTsKfQogCi8vIG1haW4gZnVuY3Rpb24KaW50IG1haW4oKQp7CiAgICBpbnQgYXJyW10gPSB7IC0xMCwgLTMsIDUsIDYsIC0yIH07CiAgICBpbnQgbiA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7CiAKICAgIGZpbmRNYXhpbXVtUHJvZHVjdChhcnIsIG4pOwogCiAgICByZXR1cm4gMDsKfQ==