Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. bool mas[400002];
  4. int n, m, k;
  5. int next_pow() {
  6. int pow = 1;
  7. while(pow < n)
  8. pow *= 2;
  9. return pow;
  10. }
  11. void exit(int x) {
  12. x += (k - 1);
  13. mas[x] = true;
  14. while (x > 0) {
  15. x = (x - 1) / 2;
  16. mas[x] = mas[2 * x + 1] || mas[2 * x + 2];
  17. }
  18. }
  19. int enter (int i, int x, int lx, int rx) {
  20. if (rx - lx == 1) {
  21. if (!mas[x]) {
  22. return -1;
  23. }
  24. mas[x] = false;
  25. return rx;
  26. }
  27. if (!mas[x]) {
  28. return -1;
  29. }
  30. int answer;
  31. int mm = (rx + lx) / 2;
  32. if (i < mm && mas[2 * x + 1]) {
  33. answer = enter(i, 2 * x + 1, lx, mm);
  34. if (answer == -1) {
  35. answer = enter(i, 2 * x + 2, mm, rx);
  36. }
  37. } else {
  38. answer = enter(i, 2 * x + 2, mm, rx);
  39. }
  40. mas[x] = mas[2 * x + 1] || mas[2 * x + 2];
  41. return answer;
  42. }
  43. int main()
  44. {
  45. freopen("parking.in", "r", stdin);
  46. freopen("parking.out", "w", stdout);
  47. // ios::sync_with_stdio(false); cin.tie(nullptr);
  48. cin >> n >> m;
  49.  
  50. k = next_pow();
  51. for (int i = 0; i < 2 *k - 1; i++)
  52. mas[i] = false;
  53. for (int i = 0; i < n; i++) {
  54. mas[k - 1 + i] = true;
  55. }
  56. for (int i = k - 2; i >= 0; i--)
  57. mas[i] = mas[2 * i + 1] || mas[2 * i + 2];
  58. /*for (int i = 0; i < 2 * k - 1; i++) {
  59. cout << mas[i] << " ";
  60. }*/
  61. //cout << endl;
  62. for (int i = 0; i < m; i++) {
  63. string s;
  64. cin >> s;
  65. if (s == "enter") {
  66. int x;
  67. cin >> x;
  68. int answer = enter(x - 1, 0, 0, k);
  69. if (answer != -1)
  70. cout << answer << endl;
  71. else
  72. cout << enter(0, 0, 0, k) << endl;
  73. }
  74. if (s == "exit") {
  75. int x;
  76. cin >> x;
  77. exit(x - 1);
  78. }
  79. }
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement