• + 0 comments

    Time complexity: O(n)

    Space complexity: O(n), if deallocates dynamic array

    int compute_idx(int x, int last_answer, int n){
        return (x ^ last_answer)%n;
    }
     
    int* dynamicArray(int n, int queries_rows, int queries_columns, int** queries, int* result_count) {
        *result_count = 0;
        int* ans_arr = (int* )malloc(queries_rows*sizeof(int));
        // initialize 2-dimensional array
        int** res_arr = (int** )malloc(n*sizeof(int* ));
        for (int i = 0; i<n ; i++){
            res_arr[i] = (int* )malloc(1000*sizeof(int));
        }
        int* res_idx = (int* )calloc(n,sizeof(int));
        int last_answer = 0;
        for (int i = 0; i<queries_rows; i++){
            int temp_idx = compute_idx(queries[i][1], last_answer, n);
            if (queries[i][0] == 1){
                res_arr[temp_idx][res_idx[temp_idx]++] = queries[i][2];
            }
            else{
                last_answer = res_arr[temp_idx][queries[i][2] % res_idx[temp_idx]];
                ans_arr[*result_count] = last_answer;
                (*result_count)++;
            }
        }
        // Free memory for res_arr and res_idx
        for (int i = 0; i < n; i++) {
            free(res_arr[i]);
        }
        free(res_arr);
        free(res_idx);
        return ans_arr;
    }