시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 1024 MB | 17 | 13 | 11 | 73.333% |
Egor has come up with a hard problem for a training camp! Here it is:
Given an array $a$ of $n$ positive integers sorted in increasing order, find 4 indices $i < j < p < q$ such that $a_i \cdot a_q = a_j \cdot a_p$.
He then wrote the checker to this problem:
// returns true if the solution is found, // returns false if the solution is not found, // makes the verdict Wrong Answer right away if the found solution is not valid 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 will overflow long long
, so Egor used division instead. How smart! Although now Egor might have another problem...
The first line contains one integer $n$ ($4 \le n \le 500\,000$) --- the size of the array.
The second line contains the array $a_1, a_2, \ldots, a_n$ itself ($1 \le a_1 < a_2 < \ldots < a_n \le 10^{18}$).
On the first line print "YES
" if there is a solution and print "NO
" otherwise.
If a solution exists, print the 4 chosen indices in order $i, j, p, q$, separated by spaces. If there is more than one solution, you can print any one.
6 2 6 11 21 47 120
YES 1 3 4 6
5 1 2 6 30 210
NO
4 7 13 77 143
YES 1 2 3 4
4 10 29 31 100
NO