# 12436 - Hulk's Trouble >author: Utin ###### tags: `qsort` --- ## Brief See the code below ## Solution 0 ```c= #include <stdio.h> #include <stdlib.h> typedef struct _node { int id, amount; } Node; int input[100005], input_len = 0, len = 0, q; Node arr[100005]; int cmp(const void* a, const void* b); int search(int l, int r, int target); int main() { // get input and sort the data scanf("%d", &input_len); for (int i = 0; i < input_len; i++) scanf("%d", &input[i]); qsort(input, input_len, sizeof(int), cmp); // construct a lookup table int start = 0, end = 0; for (int i = 0; i <= input_len; i++) { end = i; if (start >= end) start = i; if (input[start] != input[i]) { arr[len].id = input[start]; arr[len].amount = i - start; len++; start = end; } } // search scanf("%d", &q); for (int i = 0; i < q; i++) { int tmp; scanf("%d", &tmp); printf("%d\n", search(0, len, tmp)); } } // comparison function for qsort int cmp(const void* a, const void* b) { return *(int*) a - *(int*) b; } // searching function int search(int l, int r, int target) { int idx = (l + r) / 2; if (target == arr[idx].id) return arr[idx].amount; if (l == r) return 0; if (l == r - 1) return search(l, l, target) | search(r, r, target); if (target < arr[idx].id) return search(l, idx, target); if (target > arr[idx].id) return search(idx, r, target); } // By Utin ``` ## Reference