Advertisement
Galebickosikasa

Untitled

Apr 28th, 2020
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. vector<pii> global;
  2. vector<int> dop;
  3. global.pb (goo[0]);
  4. dop.pb (0);
  5. fl (i, 1, n) {
  6. auto ptt = goo[i];
  7. auto ptt1 = kek.back ();
  8. int a = ptt1.fi + ptt1.se >= ptt.fi; // до нас достают
  9. int b = ptt.fi - ptt.se <= ptt1.fi; // мы достаем
  10. int mx = ptt.fi + ptt.se, mn = ptt.fi - ptt.se;
  11. int f = 1;
  12. while (!kek.empty () && f) {
  13. while (a && b) {
  14. // mn = min (mn, ptt1.fi - ptt1.se);
  15. mx = max (mx, ptt1.fi + ptt1.se);
  16. // ptt.fi = ptt1.fi;
  17. // ptt.se = ptt.fi - mn;
  18. // dbg (mn);
  19. // dbg (ptt.fi);
  20. // dbg (ptt.se);
  21. moo.join (i, tmp.back ());
  22. int root = moo.get (i);
  23. ptt.fi = moo.koord[root];
  24. ptt.se = moo.power[root];
  25. kek.pop_back ();
  26. tmp.pop_back ();
  27. if (kek.empty ()) break;
  28. ptt1 = kek.back ();
  29. a = ptt1.fi + ptt1.se >= ptt.fi;
  30. b = ptt.fi - ptt.se <= ptt1.fi;
  31. } while (!a && b) {
  32. int x = moo.get (tmp.back ()), y = moo.get (i);
  33. // dbg (y);
  34. // dbg (x);
  35. // ptt.se = ptt.fi - mn;
  36. // dbg (ptt.fi);
  37. // dbg (ptt.se);
  38. // dbg (ptt1.fi);
  39. moo.edges[y].pb (x);
  40. kek.pop_back ();
  41. tmp.pop_back ();
  42. if (kek.empty ()) break;
  43. ptt1 = kek.back ();
  44. a = ptt1.fi + ptt1.se >= ptt.fi;
  45. b = ptt.fi - ptt.se <= ptt1.fi;
  46. // dbg (a);
  47. // dbg (b);
  48. }
  49. if (kek.empty ()) break;
  50. if (a && !b) {
  51. int x = moo.get (tmp.back ()), y = moo.get (i);
  52. moo.edges[x].pb (y);
  53. // global.pb (ptt1);
  54. // dop.pb (tmp.back ());
  55. // dbg (i);
  56. f = 0;
  57. break;
  58. }
  59. if (!(a && b)) f = 0;
  60. }
  61. goo[i].se = mx - goo[i].fi;
  62. kek.pb (goo[i]);
  63. tmp.pb (i);
  64. if (!global.empty () && moo.get (dop.back ()) == moo.get (i)) global.pop_back (), dop.pop_back ();
  65. while (!global.empty () && global.back ().fi + global.back ().se < goo[i].fi) {
  66. global.pop_back ();
  67. dop.pop_back ();
  68. }
  69. // if (!global.empty ()) dbg (global.back ().fi + global.back ().se);
  70. if (!global.empty ()) {
  71. int x = moo.get (dop.back ()), y = moo.get (i);
  72. moo.edges[x].pb (y);
  73. // dbg ("kek");
  74. // dbg (i);
  75. // dbg (dop.back ());
  76. }
  77. // if (global.empty () || global.back ().fi + global.back ().se < goo[i].fi + goo[i].se) {
  78. global.pb (goo[i]);
  79. dop.pb (i);
  80. // dbg (global.back ().fi + global.back ().se);
  81. // }
  82. // dbg (goo[i].fi);
  83. // dbg (goo[i].se);
  84. }
  85. // dbg ("kek");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement