Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #define _CRT_SECURE_NO_WARNINGS
- int compare(void *a, void *b)
- {
- return(*(int*)a - *(int*)b);
- }
- typedef int(*PCmp)(void *, void*);
- int partition(void * a, int l, int r, int sz, PCmp cmp)
- {
- char *carr = (char *)a;
- int i = l - 1;
- void *ptmp = malloc(sz);
- for (int j = l; j < r - 1; ++j)
- {
- if (cmp(carr + j*sz, carr + (r - 1)*sz) <= 0)
- {
- i++;
- memcpy(ptmp, carr + i*sz, sz);
- memcpy(carr + i*sz, carr + j*sz, sz);
- memcpy(carr + j*sz, ptmp, sz);
- }
- }
- memcpy(ptmp, carr + (i + 1)*sz, sz);
- memcpy(carr + (i + 1)*sz, carr + (r - 1)*sz, sz);
- memcpy(carr + (r - 1)*sz, ptmp, sz);
- return i + 1;
- }
- int qsort(int *a, int l, int r, int k)
- {
- if (l >= r)
- return -1;
- int q = partition(a, l, r, sizeof(int), compare);
- if (q == k)
- return a[k];
- else if (q > k)
- qsort(a, l, q, k);
- else
- qsort(a, q + 1, r, k);
- }
- int main()
- {
- int m = 0, n = 0, c = 0;
- scanf("%d", &m);
- scanf("%d", &n);
- int** matrix = (int**)malloc(m*sizeof(int));
- for (int i = 0; i < m; i++)
- {
- matrix[i] = (int*)malloc(n*sizeof(int));
- for (int j = 0; j < n; j++)
- scanf("%d", &matrix[i][j]);
- }
- int* ans = (int*)malloc(m*sizeof(int));
- for (int i = 0; i < m; i++)
- {
- scanf("%d", &c);
- ans[i] = qsort(matrix[i], 0, n, c);
- }
- for (int i = 0; i < m; i++)
- printf("%d ", ans[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement