Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct treap {
  6. int key;
  7. int prior;
  8. int ind;
  9. treap *l;
  10. treap *r;
  11. treap *par;
  12.  
  13. treap(int kkey, int kprior, int kind) {
  14. key = kkey;
  15. prior = kprior;
  16. ind = kind;
  17. l = r = par = nullptr;
  18. }
  19. };
  20.  
  21. const int N = 5e4 + 20;
  22. vector< int > pt[N];
  23. vector< int > lt[N];
  24. vector< int > rt[N];
  25. treap *t;
  26. treap *p;
  27.  
  28. void Insert(treap *cur) {
  29. if (!t) {
  30. p = cur;
  31. t = p;
  32. } else if (p->prior < cur->prior) {
  33. p->r = cur;
  34. p->r->par = p;
  35. p = p->r;
  36. } else {
  37. while (p->prior > cur->prior)
  38. if (p->par)
  39. p = p->par;
  40. else
  41. break;
  42. if (!p->par) {
  43. cur->l = p;
  44. p->par = cur;
  45. p = cur;
  46. } else {
  47. cur->l = p->r;
  48. p->r = cur;
  49. cur->par = p;
  50. p = cur;
  51. }
  52. }
  53. }
  54.  
  55. int get_ind(treap *cur) {
  56. if (cur)
  57. return cur->ind;
  58. else
  59. return 0;
  60. }
  61.  
  62. void print(treap *cur) {
  63. cout << cur->ind << "\n";
  64. if (!cur)
  65. return;
  66. print(cur->l);
  67. pt[cur->ind].push_back(get_ind(cur->par));
  68. lt[cur->ind].push_back(get_ind(cur->l));
  69. rt[cur->ind].push_back(get_ind(cur->r));
  70. print(cur->r);
  71. }
  72.  
  73. int main() {
  74. // freopen("input.txt", "r", stdin);
  75. // freopen("output.txt", "w", stdout);
  76. int n;
  77. cin >> n;
  78. vector< pair< int, pair< int, int > > > v;
  79. for (int i = 1; i <= n; i++) {
  80. int x;
  81. int y;
  82. cin >> x >> y;
  83. v.push_back({x, {y, i}});
  84. }
  85. sort(v.begin(), v.end());
  86. for (int i = 0; i < v.size(); i++) {
  87. int x = v[i].first;
  88. int y = v[i].second.first;
  89. int index = v[i].second.second;
  90. treap *cur = new treap(x, y, index);
  91. Insert(cur);
  92. }
  93. cout << "YES\n" << t->ind;
  94. print(t);
  95. for (int i = 1; i <= n; i++)
  96. cout << pt[i][0] << " " << lt[i][0] << " " << rt[i][0] << "\n";
  97. return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement