#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define TEST_COUNT 1000
typedef int bool;
typedef int (*searcher)(int *A, int x, int l, int r);
int cmp(const void *a, const void *b) {
int i = *(int*)a;
int j = *(int*)b;
return (i < j) ? -1 : (i == j) ? 0 : 1;
}
int linsearch(int *A, int x, int n) {
int i;
for (i = 0; i < n; i++) {
if (A[i] == x) {
return i;
}
}
return -1;
}
void print(int *A, int n) {
if (n > 0) {
}
int i;
for (i = 1; i < n; i++) {
}
}
void test(searcher s) {
//~ if (s(0, 0, 0, -1) != -1) {
//~ printf("FAIL! []\n");
//~ return;
//~ }
int A[TEST_COUNT];
int i, j;
for (i = 1; i < TEST_COUNT; i++) {
for (j = 0; j < i; j++) {
}
qsort(A
, i
, sizeof(int), cmp
);
int k = s(A, x, 0, i-1);
int l = linsearch(A,x,i);
if (k == -1) {
if (l != -1) {
printf("\nFAIL! x = %d, k = %d, l = %d\n", x
, k
, l
); print(A, i);
return;
}
} else if (A[k] != x) {
printf("\nFAIL! x = %d, k = %d, l = %d\n", x
, k
, l
); print(A, i);
return;
}
}
}
int mock(int *A, int x, int l, int r) {
return linsearch(A, x, r);
}
int szuk_rek(int *A, int X, int L, int R){
// printf("L =%d R = %d\n", L, R);
if(A[L] > X || A[R] < X){
return 0;
}
if(A[R]==X){
return R;
}
if(L > R){
return -1;
}
if( L == R && A[L] != X){
return -1;
}
if (A[(L+R)/2]== X){
return (L+R)/2;
}
if( A[(L+R)/2] < X){
return szuk_rek(A, X, (L + R)/2, R);
}
if( A[(L+R)/2] > X){
return szuk_rek(A, X, L, (L + R)/2);
}
return -1;
}
int main(void) {
test(szuk_rek);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwCgoKdHlwZWRlZiBpbnQgYm9vbDsKdHlwZWRlZiBpbnQgKCpzZWFyY2hlcikoaW50ICpBLCBpbnQgeCwgaW50IGwsIGludCByKTsKCmludCBjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgewogICAgaW50IGkgPSAqKGludCopYTsKCWludCBqID0gKihpbnQqKWI7CglyZXR1cm4gKGkgPCBqKSA/IC0xIDogKGkgPT0gaikgPyAwIDogMTsKfQoKaW50IGxpbnNlYXJjaChpbnQgKkEsIGludCB4LCBpbnQgbikgewoJaW50IGk7Cglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJaWYgKEFbaV0gPT0geCkgewoJCQlyZXR1cm4gaTsKCQl9Cgl9CglyZXR1cm4gLTE7Cn0KCnZvaWQgcHJpbnQoaW50ICpBLCBpbnQgbikgewoJcHJpbnRmKCJbIik7CglpZiAobiA+IDApIHsKCQlwcmludGYoIiVkIiwgQVswXSk7Cgl9CglpbnQgaTsKCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKCQlwcmludGYoIiwgJWQiLCBBW2ldKTsKCX0KCXByaW50ZigiXVxuIik7Cn0KCnZvaWQgdGVzdChzZWFyY2hlciBzKSB7CgkvL34gaWYgKHMoMCwgMCwgMCwgLTEpICE9IC0xKSB7CgkJLy9+IHByaW50ZigiRkFJTCEgW11cbiIpOwoJCS8vfiByZXR1cm47CgkvL34gfQoJCglpbnQgQVtURVNUX0NPVU5UXTsKCWludCBpLCBqOwoJZm9yIChpID0gMTsgaSA8IFRFU1RfQ09VTlQ7IGkrKykgewoJCXByaW50ZigiKCVkIHRlc3RzKS4uLlxyIiwgaSk7CgkJZmZsdXNoKHN0ZG91dCk7CgkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewoJCQlBW2pdID0gYWJzKHJhbmQoKSkgJSBpOwoJCQkKCQl9CgkJaW50IHggPSBhYnMocmFuZCgpKSAlIGk7CgkJCgkJcXNvcnQoQSwgaSwgc2l6ZW9mKGludCksIGNtcCk7CgkJCgkJaW50IGsgPSBzKEEsIHgsIDAsIGktMSk7CgkJaW50IGwgPSBsaW5zZWFyY2goQSx4LGkpOwoJCWlmIChrID09IC0xKSB7CgkJCWlmIChsICE9IC0xKSB7CgkJCQlwcmludGYoIlxuRkFJTCEgeCA9ICVkLCBrID0gJWQsIGwgPSAlZFxuIiwgeCwgaywgbCk7CgkJCQlwcmludChBLCBpKTsKCQkJCXJldHVybjsKCQkJfQoJCX0gZWxzZSBpZiAoQVtrXSAhPSB4KSB7CgkJCXByaW50ZigiXG5GQUlMISB4ID0gJWQsIGsgPSAlZCwgbCA9ICVkXG4iLCB4LCBrLCBsKTsKCQkJcHJpbnQoQSwgaSk7CgkJCXJldHVybjsKCQl9Cgl9CglwcmludGYoIk9LIVxuIik7Cn0KCmludCBtb2NrKGludCAqQSwgaW50IHgsIGludCBsLCBpbnQgcikgewoJcmV0dXJuIGxpbnNlYXJjaChBLCB4LCByKTsKfQoKCmludCBzenVrX3JlayhpbnQgKkEsIGludCBYLCBpbnQgTCwgaW50IFIpewovLyAgICAgICAgcHJpbnRmKCJMID0lZCBSID0gJWRcbiIsIEwsIFIpOwogICAgICAgIGlmKEFbTF0gPiBYIHx8IEFbUl0gPCBYKXsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZihBW1JdPT1YKXsKICAgICAgICAgICAgICAgIHJldHVybiBSOwogICAgICAgIH0KICAgICAgICBpZihMID4gUil7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGlmKCBMID09IFIgJiYgQVtMXSAhPSBYKXsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAKICAgICAgICBpZiAoQVsoTCtSKS8yXT09IFgpewogICAgICAgICAgICAgICAgcmV0dXJuIChMK1IpLzI7CiAgICAgICAgfQogCiAgICAgICAgaWYoIEFbKEwrUikvMl0gPCBYKXsKICAgICAgICAgICAgICAgIHJldHVybiBzenVrX3JlayhBLCBYLCAoTCArIFIpLzIsIFIpOwogICAgICAgIH0KICAgICAgICBpZiggQVsoTCtSKS8yXSA+IFgpewogICAgICAgICAgICAgICAgcmV0dXJuIHN6dWtfcmVrKEEsIFgsIEwsIChMICsgUikvMik7CiAgICAgICAgfQogICAgICAgcmV0dXJuIC0xOwp9CgppbnQgbWFpbih2b2lkKSB7CglzcmFuZCg3KTsKCQoJdGVzdChzenVrX3Jlayk7CgkKCQoJCglyZXR1cm4gMDsKfQo=