fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int partition(int* liczba,char* znaki, int p, int r)
  6. {
  7. int pivot = liczba[r];
  8.  
  9. while ( p < r )
  10. {
  11. while ( liczba[p] > pivot )
  12. p++;
  13.  
  14. while ( liczba[r] < pivot )
  15. r--;
  16.  
  17. if ( liczba[p] == liczba[r] )
  18. p++;
  19. else if ( p < r ) {
  20. int tmp = liczba[p];
  21. char tmpch= znaki [p];
  22. liczba[p] = liczba[r];
  23. znaki[p] = znaki[r];
  24. liczba[r] = tmp;
  25. znaki[r] = tmpch;
  26. }
  27. }
  28.  
  29. return r;
  30. }
  31.  
  32. int quick_select(int*liczba, char* znaki, int p, int r, int k)
  33. {
  34. if ( p == r ) return znaki[p];
  35. int j = partition(liczba,znaki, p, r);
  36. int length = j - p + 1;
  37. if ( length == k ) return znaki[j];
  38. else if ( k < length ) return quick_select(liczba,znaki, p, j - 1, k);
  39. else return quick_select(liczba,znaki, j + 1, r, k - length);
  40. }
  41.  
  42. int main()
  43. {
  44.  
  45. int n,k;
  46. char z;
  47. cin>>n;
  48. int *liczby=new int [n];
  49. char *znaki=new char [n];
  50. for(int i=0;i<n;++i)
  51. {
  52. cin>>liczby[i];
  53. cin>>znaki[i];
  54. }
  55. cin>>k;
  56. for ( int i =1; i <=k; i++)
  57. {
  58. if (i!=1)
  59. {
  60. cout<<endl;
  61. }
  62. z=quick_select(liczby, znaki, 0, n-1, i);
  63. cout<<z;
  64. }
  65. delete [] liczby;
  66. delete [] znaki;
  67. return 0;
  68. }
Success #stdin #stdout 0s 15240KB
stdin
4
2 a
3 b
4 c
1 d
3
stdout
c
b
a