fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. class quee {
  7. int f;
  8. int b;
  9. int* arr;
  10. public:
  11. quee(int n) {
  12. f = 0;
  13. b = -1;
  14. arr = new int[n];
  15. }
  16. void push(int n) {
  17. arr[++b] = n;
  18. }
  19. int pop() {
  20. if (empty()) return -1;
  21. return arr[f++];
  22. }
  23. int size() {
  24. return b - f + 1;
  25. }
  26. int empty() {
  27. return (b - f) == -1;
  28. }
  29. int front() {
  30. if (empty()) return -1;
  31. return arr[f];
  32. }
  33. int back() {
  34. if (empty()) return -1;
  35. return arr[b];
  36. }
  37. ~quee() {
  38. delete[] arr;
  39. }
  40. };
  41.  
  42. bool compare(int i, int j)
  43. {
  44. return i > j;
  45. }
  46. int main(void)
  47. {
  48. ios_base::sync_with_stdio(false); cin.tie(NULL);
  49. int n, check, t, cnt;
  50. cin >> t;
  51. while (t--) {
  52. cin >> n >> check;
  53. int temp;
  54. int* arr = new int[n];
  55. quee q(n * n); //값 입력
  56. quee p(n * n); //인덱스값 입력
  57. cnt = 0; //인쇄한 순서
  58. for (int i = 0; i < n; i++)
  59. {
  60. cin >> temp;
  61. q.push(temp);
  62. arr[i] = temp;
  63. p.push(i);
  64. }
  65. sort(arr, arr + n, compare); //내림 차순
  66.  
  67. while (q.size() != 0)
  68. {
  69. while (arr[cnt] != q.front()) //입력한 값들 중 가장 큰 값인지 확인 아니라면 순서 뒤로 미루기
  70. {
  71. q.push(q.pop());
  72. p.push(p.pop());
  73. }
  74. q.pop(); //인쇄
  75. cnt++;
  76. if (p.pop() == check) { //인덱스 값과 해당 인덱스 값이 맞는지 확인
  77. cout << cnt << endl;
  78. break;
  79. }
  80. }
  81. delete[] arr;
  82. }
  83. return 0;
  84. }
Success #stdin #stdout 0s 5604KB
stdin
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
stdout
1
2
5