I posted earlier, but I did not properly format or add my code. Say I have an int array x = [1,2,3]. Given a value i, I want to create an array x^i, such that, if i = 3, array x^i = [1,1,1,2,2,2,3,3,3]. If i = 5, array x^i = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5]. I am dynamically allocating memory for this.
However, my code for i = 3 is creating an array = [1,2,3,1,2,3,1,2,3]. I've tried many different things, and I got something like [1,1,1,1,1,1,1,1,1] or [3,3,3,3,3,3,3,3,3] but never the correct answer.
Here is my code:
void binary_search(int size_a, int * A, int size_x, int *X, int max_i, int min_i){
    int i, j, k, count = 0, max_repeat = 0;
    while(min_i <= max_i){
    int repeats = (max_i + min_i)/2;
    int * temp = realloc(X, size_x * sizeof(int) * repeats);
    X = temp;
    for(k = 0; k < size_x; ++k){
    int idx = size_x - k -1;
    temp = &X[idx];
        for(j = 0; j < repeats; ++j){
            X[idx * repeats + j] = *temp;
        }
    }
    printf("New X: ");
        for(i = 0; i < size_x * repeats; i++){
            printf("%d ", X[i]);
        }
    int count = 0;
    for(i = 0; i < size_x * repeats; i++){
        for(j = 0; j < size_a; j++){
            if(A[j] == X[i]){
                count++;
                i++;
            }
        }
    }
    if (count == size_x * repeats){
        printf("Low: %d Mid %d High % d Passes\n", min_i, repeats, max_i);
        min_i = repeats + 1;
    }
    else
        printf("Low: %d Mid %d High % d Fails\n", min_i, repeats, max_i);
        max_i = repeats - 1;
    }
}
the variable repeats represents the value i in x^i.
The output is this:
Old X: 1 2 3 
New X: 1 1 1 2 2 2 3 3 3 Low: 0 Mid 3 High  6 Fails
New X: 1 1 1 Low: 0 Mid 1 High  2 Fails
New X: Low: 0 Mid 0 High  0 Fails
The first iteration is correct, however, the second iteration should not be [1,1,1], it should be [1,2,3].
Where am I going wrong?
 
                        
Here you go:
Live example available at onlinegdb.