Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<pii> global;
- vector<int> dop;
- global.pb (goo[0]);
- dop.pb (0);
- fl (i, 1, n) {
- auto ptt = goo[i];
- auto ptt1 = kek.back ();
- int a = ptt1.fi + ptt1.se >= ptt.fi; // до нас достают
- int b = ptt.fi - ptt.se <= ptt1.fi; // мы достаем
- int mx = ptt.fi + ptt.se, mn = ptt.fi - ptt.se;
- int f = 1;
- while (!kek.empty () && f) {
- while (a && b) {
- // mn = min (mn, ptt1.fi - ptt1.se);
- mx = max (mx, ptt1.fi + ptt1.se);
- // ptt.fi = ptt1.fi;
- // ptt.se = ptt.fi - mn;
- // dbg (mn);
- // dbg (ptt.fi);
- // dbg (ptt.se);
- moo.join (i, tmp.back ());
- int root = moo.get (i);
- ptt.fi = moo.koord[root];
- ptt.se = moo.power[root];
- kek.pop_back ();
- tmp.pop_back ();
- if (kek.empty ()) break;
- ptt1 = kek.back ();
- a = ptt1.fi + ptt1.se >= ptt.fi;
- b = ptt.fi - ptt.se <= ptt1.fi;
- } while (!a && b) {
- int x = moo.get (tmp.back ()), y = moo.get (i);
- // dbg (y);
- // dbg (x);
- // ptt.se = ptt.fi - mn;
- // dbg (ptt.fi);
- // dbg (ptt.se);
- // dbg (ptt1.fi);
- moo.edges[y].pb (x);
- kek.pop_back ();
- tmp.pop_back ();
- if (kek.empty ()) break;
- ptt1 = kek.back ();
- a = ptt1.fi + ptt1.se >= ptt.fi;
- b = ptt.fi - ptt.se <= ptt1.fi;
- // dbg (a);
- // dbg (b);
- }
- if (kek.empty ()) break;
- if (a && !b) {
- int x = moo.get (tmp.back ()), y = moo.get (i);
- moo.edges[x].pb (y);
- // global.pb (ptt1);
- // dop.pb (tmp.back ());
- // dbg (i);
- f = 0;
- break;
- }
- if (!(a && b)) f = 0;
- }
- goo[i].se = mx - goo[i].fi;
- kek.pb (goo[i]);
- tmp.pb (i);
- if (!global.empty () && moo.get (dop.back ()) == moo.get (i)) global.pop_back (), dop.pop_back ();
- while (!global.empty () && global.back ().fi + global.back ().se < goo[i].fi) {
- global.pop_back ();
- dop.pop_back ();
- }
- // if (!global.empty ()) dbg (global.back ().fi + global.back ().se);
- if (!global.empty ()) {
- int x = moo.get (dop.back ()), y = moo.get (i);
- moo.edges[x].pb (y);
- // dbg ("kek");
- // dbg (i);
- // dbg (dop.back ());
- }
- // if (global.empty () || global.back ().fi + global.back ().se < goo[i].fi + goo[i].se) {
- global.pb (goo[i]);
- dop.pb (i);
- // dbg (global.back ().fi + global.back ().se);
- // }
- // dbg (goo[i].fi);
- // dbg (goo[i].se);
- }
- // dbg ("kek");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement