Egor Has a Problem
Time limit1sMemory limit1024 MB
Given a sorted array of distinct positive integers up to 1e18, find indices i<j<p<q with a_i * a_q = a_j * a_p, or report NO.
Statement
Egor has come up with a hard problem for a training camp! Here it is:
Given an array of positive integers sorted in increasing order, find 4 indices such that .
He then wrote the checker to this problem:
bool getAnswer(InStream &stream, vector<long long> a) {
string s = stream.readToken("NO|YES"); // PE if the string is not NO or YES
if (s == "NO") return false;
vector<int> b = stream.readInts(4, 1, (int)a.size()); // 4 indices between 1 and n
int i = b[0] - 1, j = b[1] - 1, p = b[2] - 1, q = b[3] - 1; // -1 to make 0-indexed
stream.ensuref(i < j && j < p && p < q, "4 indices should be in increasing order");
stream.ensuref(a[q] / a[p] == a[j] / a[i], "the products are not equal");
return true;
}
The multiplication overflows long long, so Egor used division instead. Now Egor might have another problem.
Input
The first line contains one integer (), the size of the array.
The second line contains the array ().
Output
On the first line print "YES" if there is a solution, and "NO" otherwise.
If a solution exists, print the 4 chosen indices in order , separated by spaces. If there is more than one solution, you can print any one.