#include <iostream>
#include <climits>
#include <cstdlib>
using namespace std;
// Prints the pair with sum cloest to x
void printClosest(int arr[], int n, int x)
{
int res_l, res_r; // To store indexes of result pair
// Initialize left and right indexes and difference between
// pair sum and x
int l = 0, r = n-1, diff = INT_MAX;
// While there are elements between l and r
while (r > l)
{
// Check if this pair is closer than the closest pair so far
if (abs(arr[l] + arr[r] - x) < diff)
{
res_l = l;
res_r = r;
diff = abs(arr[l] + arr[r] - x);
}
// If this pair has more sum, move to smaller values.
if (arr[l] + arr[r] > x)
r--;
else // Move to larger values
l++;
}
cout <<" The closest pair is " << arr[res_l] << " and " << arr[res_r];
}
// Driver program to test above functions
int main()
{
int arr[] = {10, 22, 28, 29, 32, 45}, x = 54;
int n = sizeof(arr)/sizeof(arr[0]);
printClosest(arr, n, x);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPGNzdGRsaWI+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLy8gUHJpbnRzIHRoZSBwYWlyIHdpdGggc3VtIGNsb2VzdCB0byB4CnZvaWQgcHJpbnRDbG9zZXN0KGludCBhcnJbXSwgaW50IG4sIGludCB4KQp7CiAgICBpbnQgcmVzX2wsIHJlc19yOyAgLy8gVG8gc3RvcmUgaW5kZXhlcyBvZiByZXN1bHQgcGFpcgogCiAgICAvLyBJbml0aWFsaXplIGxlZnQgYW5kIHJpZ2h0IGluZGV4ZXMgYW5kIGRpZmZlcmVuY2UgYmV0d2VlbgogICAgLy8gcGFpciBzdW0gYW5kIHgKICAgIGludCBsID0gMCwgciA9IG4tMSwgZGlmZiA9IElOVF9NQVg7CiAKICAgIC8vIFdoaWxlIHRoZXJlIGFyZSBlbGVtZW50cyBiZXR3ZWVuIGwgYW5kIHIKICAgIHdoaWxlIChyID4gbCkKICAgIHsKICAgICAgIC8vIENoZWNrIGlmIHRoaXMgcGFpciBpcyBjbG9zZXIgdGhhbiB0aGUgY2xvc2VzdCBwYWlyIHNvIGZhcgogICAgICAgaWYgKGFicyhhcnJbbF0gKyBhcnJbcl0gLSB4KSA8IGRpZmYpCiAgICAgICB7CiAgICAgICAgICAgcmVzX2wgPSBsOwogICAgICAgICAgIHJlc19yID0gcjsKICAgICAgICAgICBkaWZmID0gYWJzKGFycltsXSArIGFycltyXSAtIHgpOwogICAgICAgfQogCiAgICAgICAvLyBJZiB0aGlzIHBhaXIgaGFzIG1vcmUgc3VtLCBtb3ZlIHRvIHNtYWxsZXIgdmFsdWVzLgogICAgICAgaWYgKGFycltsXSArIGFycltyXSA+IHgpCiAgICAgICAgICAgci0tOwogICAgICAgZWxzZSAvLyBNb3ZlIHRvIGxhcmdlciB2YWx1ZXMKICAgICAgICAgICBsKys7CiAgICB9CiAKICAgIGNvdXQgPDwiIFRoZSBjbG9zZXN0IHBhaXIgaXMgIiA8PCBhcnJbcmVzX2xdIDw8ICIgYW5kICIgPDwgYXJyW3Jlc19yXTsKfQogCi8vIERyaXZlciBwcm9ncmFtIHRvIHRlc3QgYWJvdmUgZnVuY3Rpb25zCmludCBtYWluKCkKewogICAgaW50IGFycltdID0gIHsxMCwgMjIsIDI4LCAyOSwgMzIsIDQ1fSwgeCA9IDU0OwogICAgaW50IG4gPSBzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKICAgIHByaW50Q2xvc2VzdChhcnIsIG4sIHgpOwogICAgcmV0dXJuIDA7Cn0=