Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. struct line
  2. {
  3. long long k, b;
  4. };
  5. line t[(1 << 21)];
  6. long long f(line a, int x)
  7. {
  8. return x * a.k + a.b;
  9. }
  10.  
  11. void add(line nw, int v = 1, int l = 0, int r = 1e6)
  12. {
  13. int m = l + r >> 1;
  14. bool lef = f(nw, l) < f(t[v], l);
  15. bool mid = f(nw, m) < f(t[v], m);
  16. if (mid)
  17. swap(t[v], nw);
  18. if (l == r)
  19. return;
  20. if (lef != mid)
  21. add(nw, 2 * v, l, m);
  22. else
  23. add(nw, 2 * v + 1, m + 1, r);
  24. }
  25. long long get(int pos, int v = 1, int l = 0, int r = 1e6)
  26. {
  27. if (l == r)
  28. return f(t[v], pos);
  29. int m = l + r >> 1;
  30. long long val = f(t[v], pos);
  31. if (pos <= m)
  32. return min(get(pos, 2 * v, l, m), val);
  33. else
  34. return min(get(pos, 2 * v + 1, m + 1, r), val);
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement