trafik

Untitled

Mar 23rd, 2022
1,222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <set>
  5. #include <deque>
  6. #include <queue>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <map>
  10. #include <string>
  11. #include <iomanip>
  12. #include <fstream>
  13. #include <random>
  14. #include <chrono>
  15. #include <unordered_map>
  16. #define _GLIBCXX_DEBUG
  17. #define all(v) v.begin(), v.end()
  18. #define ll long long
  19. #define ld long double
  20. #define lb lower_bound
  21. #define ub upper_bound
  22. #define len(v) (ll)v.size()
  23. #define last(v) (ll)v[len(v) - 1]
  24. #define fi first
  25. #define se second
  26. #pragma GCC optimize("O3")
  27. #pragma GCC target("avx2")
  28. #pragma GCC optimize("unroll-loops")
  29.  
  30. #pragma GCC optimize("Ofast,unroll-loops")
  31. #pragma GCC target("avx,avx2,fma,sse4")
  32.  
  33. #pragma GCC target("avx")
  34. #pragma GCC optimize(3)
  35. #pragma GCC optimize("Ofast")
  36. #pragma GCC optimize("inline")
  37. #pragma GCC optimize("-fgcse")
  38. #pragma GCC optimize("-fgcse-lm")
  39. #pragma GCC optimize("-fipa-sra")
  40. #pragma GCC optimize("-ftree-pre")
  41. #pragma GCC optimize("-ftree-vrp")
  42. #pragma GCC optimize("-fpeephole2")
  43. #pragma GCC optimize("-ffast-math")
  44. #pragma GCC optimize("-fsched-spec")
  45. #pragma GCC optimize("-falign-jumps")
  46. #pragma GCC optimize("-falign-loops")
  47. #pragma GCC optimize("-falign-labels")
  48. #pragma GCC optimize("-fdevirtualize")
  49. #pragma GCC optimize("-fcaller-saves")
  50. #pragma GCC optimize("-fcrossjumping")
  51. #pragma GCC optimize("-fthread-jumps")
  52. #pragma GCC optimize("-freorder-blocks")
  53. #pragma GCC optimize("-fschedule-insns")
  54. #pragma GCC optimize("inline-functions")
  55. #pragma GCC optimize("-ftree-tail-merge")
  56. #pragma GCC optimize("-fschedule-insns2")
  57. #pragma GCC optimize("-fstrict-aliasing")
  58. #pragma GCC optimize("-falign-functions")
  59. #pragma GCC optimize("-fcse-follow-jumps")
  60. #pragma GCC optimize("-fsched-interblock")
  61. #pragma GCC optimize("-fpartial-inlining")
  62. #pragma GCC optimize("no-stack-protector")
  63. #pragma GCC optimize("-freorder-functions")
  64. #pragma GCC optimize("-findirect-inlining")
  65. #pragma GCC optimize("-fhoist-adjacent-loads")
  66. #pragma GCC optimize("-frerun-cse-after-loop")
  67. #pragma GCC optimize("inline-small-functions")
  68. #pragma GCC optimize("-finline-small-functions")
  69. #pragma GCC optimize("-ftree-switch-conversion")
  70. #pragma GCC optimize("-foptimize-sibling-calls")
  71. #pragma GCC optimize("-fexpensive-optimizations")
  72. #pragma GCC optimize("inline-functions-called-once")
  73. #pragma GCC optimize("-fdelete-null-pointer-checks")
  74. #pragma GCC target("avx,avx2,sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,mmx,abm")
  75. using namespace std;
  76. const ll inf = 1e9;
  77. const ll MAXN = 3e5 + 1;
  78. const ll MAXM = 1e5 + 1;
  79. const int logn = 29;
  80. const ll m = 1e9;
  81.  
  82. mt19937 rnd(0);
  83.  
  84. template<class T>
  85. istream& operator>>(istream& in, vector<T>& a) {
  86.     for (auto& i : a)
  87.         in >> i;
  88.     return in;
  89. }
  90. template<class T>
  91. ostream& operator<<(ostream& out, vector<T>& a) {
  92.     for (auto& i : a)
  93.         out << i << " ";
  94.     return out;
  95. }
  96.  
  97. struct Node {
  98.     int key;
  99.     Node* l;
  100.     Node* r;
  101.     Node(int val) {
  102.         l = NULL;
  103.         r = NULL;
  104.         key = val;
  105.     }
  106. };
  107. Node* root = NULL;
  108.  
  109. void insert(int key) {
  110.     if (root == NULL) {
  111.         root = new Node(key);
  112.         return;
  113.     }
  114.     Node* cur = root;
  115.     while (cur && cur->key != key) {
  116.         if (cur->key > key && cur->l == NULL) {
  117.             cur->l = new Node(key);
  118.             return;
  119.         }
  120.         if (cur->key < key && cur->r == NULL) {
  121.             cur->r = new Node(key);
  122.             return;
  123.         }
  124.         if (cur->key > key)
  125.             cur = cur->l;
  126.         else
  127.             cur = cur->r;
  128.     }
  129. }
  130.  
  131. Node* srch(int key) {
  132.     Node* cur = root;
  133.     while (cur && cur->key != key) {
  134.         if (cur->key > key)
  135.             cur = cur->l;
  136.         else
  137.             cur = cur->r;
  138.     }
  139.     return cur;
  140. }
  141.  
  142. Node* next(int x) {
  143.     Node* cur = root;
  144.     Node* succ = NULL;
  145.     while (cur != NULL) {
  146.         if (cur->key > x) {
  147.             succ = cur;
  148.             cur = cur->l;
  149.         } else
  150.             cur = cur->r;
  151.     }
  152.     return succ;
  153. }
  154.  
  155. Node* prev(int x) {
  156.     Node* cur = root;
  157.     Node* succ = NULL;
  158.     while (cur != NULL) {
  159.         if (cur->key < x) {
  160.             succ = cur;
  161.             cur = cur->r;
  162.         } else
  163.             cur = cur->l;
  164.     }
  165.     return succ;
  166. }
  167.  
  168. Node* minimum(Node* x) {
  169.     if (x->l == NULL)
  170.         return x;
  171.     return minimum(x->l);
  172. }
  173.  
  174. Node* del(Node* v, int z) {
  175.     if (v == NULL) return v;
  176.     if (z < v->key)
  177.         v->l = del(v->l, z);
  178.     else if (z > v->key)
  179.         v->r = del(v->r, z);
  180.     else if (v->l != NULL && v->r != NULL) {
  181.         v->key = minimum(v->r)->key;
  182.         v->r = del(v->r, v->key);
  183.     }
  184.     else {
  185.         if (v->l != NULL)
  186.             v = v->l;
  187.         else if (v->r != NULL) {
  188.             v = v->r;
  189.         }
  190.         else
  191.             v = NULL;
  192.     }
  193.     return v;
  194. }
  195.  
  196. string tp;
  197. int x;
  198. void solve() {
  199.     //ofstream fout("numbers.out");
  200.     while (cin >> tp) {
  201.         cin >> x;  
  202.         if (tp == "insert") insert(x);
  203.         else if (tp == "delete") del(root, x);
  204.         else if (tp == "exists") {
  205.             auto ans = srch(x);
  206.             if (ans == NULL) cout << "false" << endl;
  207.             else cout << "true" << endl;
  208.         }
  209.         else if (tp == "next") {
  210.             auto ans = next(x);
  211.             if (ans == NULL) cout << "none" << endl;
  212.             else cout << ans->key << endl;
  213.         }
  214.         else {
  215.             auto ans = prev(x);
  216.             if (ans == NULL) cout << "none" << endl;
  217.             else cout << ans->key << endl;
  218.         }
  219.     }
  220. }
  221.  
  222. int main() {
  223.     ios::sync_with_stdio(false);
  224.     cin.tie(nullptr);
  225.     cout.tie(nullptr);
  226.  
  227.     solve();
  228.  
  229.     return 0;
  230. };
Advertisement
Add Comment
Please, Sign In to add comment