#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int binarySearch(vector<int>& A, vector<int>& B, int index, int loA, int hiA, int loB, int hiB) {
if (loA == hiA && loB == hiB) {
if (loA + loB >= index) { // loB is exclusive
return min(A[loA], B[loB]);
} else {
return max(A[loA], B[loB]);
}
}
int midA = (loA + hiA + 1) / 2;
int midB = upper_bound(B.begin(), B.end(), A[midA]) - B.begin();
if (midA + midB > index) {
return binarySearch(B, A, index, loB, hiB, loA, midA - 1);
} else {
return binarySearch(B, A, index, loB, hiB, midA, hiA);
}
}
double findMedian(vector<int>& A, vector<int>& B) {
int totalSize = A.size() + B.size();
int oddIndex = totalSize / 2;
int evenIndex = totalSize / 2 - (totalSize % 2 == 0);
int oddBinarySearch = binarySearch(A, B, oddIndex, 0, A.size() - 1, 0, B.size() - 1);
int evenBinarySearch = binarySearch(A, B, evenIndex, 0, A.size() - 1, 0, B.size() - 1);
return (oddBinarySearch + evenBinarySearch) / 2.0;
}
int main() {
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGJpbmFyeVNlYXJjaCh2ZWN0b3I8aW50PiYgQSwgdmVjdG9yPGludD4mIEIsIGludCBpbmRleCwgaW50IGxvQSwgaW50IGhpQSwgaW50IGxvQiwgaW50IGhpQikgewoJaWYgKGxvQSA9PSBoaUEgJiYgbG9CID09IGhpQikgewoJCWlmIChsb0EgKyBsb0IgPj0gaW5kZXgpIHsgLy8gbG9CIGlzIGV4Y2x1c2l2ZQoJCQlyZXR1cm4gbWluKEFbbG9BXSwgQltsb0JdKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gbWF4KEFbbG9BXSwgQltsb0JdKTsKCQl9Cgl9CgkKCWludCBtaWRBID0gKGxvQSArIGhpQSArIDEpIC8gMjsKCWludCBtaWRCID0gdXBwZXJfYm91bmQoQi5iZWdpbigpLCBCLmVuZCgpLCBBW21pZEFdKSAtIEIuYmVnaW4oKTsKCQoJaWYgKG1pZEEgKyBtaWRCID4gaW5kZXgpIHsKCQlyZXR1cm4gYmluYXJ5U2VhcmNoKEIsIEEsIGluZGV4LCBsb0IsIGhpQiwgbG9BLCBtaWRBIC0gMSk7Cgl9IGVsc2UgewoJCXJldHVybiBiaW5hcnlTZWFyY2goQiwgQSwgaW5kZXgsIGxvQiwgaGlCLCBtaWRBLCBoaUEpOwoJfQoJCn0KCmRvdWJsZSBmaW5kTWVkaWFuKHZlY3RvcjxpbnQ+JiBBLCB2ZWN0b3I8aW50PiYgQikgewogICAgaW50IHRvdGFsU2l6ZSA9IEEuc2l6ZSgpICsgQi5zaXplKCk7CiAgICBpbnQgb2RkSW5kZXggPSB0b3RhbFNpemUgLyAyOwogICAgaW50IGV2ZW5JbmRleCA9IHRvdGFsU2l6ZSAvIDIgLSAodG90YWxTaXplICUgMiA9PSAwKTsKICAgIAogICAgaW50IG9kZEJpbmFyeVNlYXJjaCA9IGJpbmFyeVNlYXJjaChBLCBCLCBvZGRJbmRleCwgMCwgQS5zaXplKCkgLSAxLCAwLCBCLnNpemUoKSAtIDEpOwogICAgaW50IGV2ZW5CaW5hcnlTZWFyY2ggPSBiaW5hcnlTZWFyY2goQSwgQiwgZXZlbkluZGV4LCAwLCBBLnNpemUoKSAtIDEsIDAsIEIuc2l6ZSgpIC0gMSk7CiAgICAKICAgIHJldHVybiAob2RkQmluYXJ5U2VhcmNoICsgZXZlbkJpbmFyeVNlYXJjaCkgLyAyLjA7Cn0KCgppbnQgbWFpbigpIHsKCXJldHVybiAwOwp9