Advertisement
Infernale

Dragon

Jan 13th, 2019
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.15 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void merge(int arr[], int l, int m, int r){
  4.     int i, j, k;
  5.     int n1 = m - l + 1;
  6.     int n2 =  r - m;
  7.     int L[n1], R[n2];
  8.     for (i = 0; i < n1; i++)
  9.         L[i] = arr[l + i];
  10.     for (j = 0; j < n2; j++)
  11.         R[j] = arr[m + 1+ j];
  12.     i = 0;
  13.     j = 0;
  14.     k = l;
  15.     while (i < n1 && j < n2){
  16.         if (L[i] <= R[j]){
  17.             arr[k] = L[i];
  18.             i++;
  19.         }else{
  20.             arr[k] = R[j];
  21.             j++;
  22.         }
  23.         k++;
  24.     }
  25.     while (i < n1){
  26.         arr[k] = L[i];
  27.         i++;
  28.         k++;
  29.     }
  30.     while (j < n2){
  31.         arr[k] = R[j];
  32.         j++;
  33.         k++;
  34.     }
  35. }
  36. void mergeSort(int arr[], int l, int r){
  37.     if (l < r){
  38.         int m = l+(r-l)/2;
  39.         mergeSort(arr, l, m);
  40.         mergeSort(arr, m+1, r);
  41.         merge(arr, l, m, r);
  42.     }
  43. }
  44.  
  45. int main(){
  46.     int size, queries, temp;
  47.     scanf("%d %d", &size, &queries);
  48.     int data[size];
  49.     for(int i=0;i<size;i++){
  50.         scanf("%d", &data[i]);
  51.     }
  52.     mergeSort(data, 0, size-1);
  53.     while(queries--){
  54.         scanf("%d", &temp);
  55.         printf("%d\n", data[temp-1]);
  56.     }
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement