Guest User

Untitled

a guest
Jan 19th, 2021
698
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. #include <cstdio>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <memory.h>
  6. #include <cmath>
  7. #include <map>
  8. #include <set>
  9. #include <queue>
  10. #include <stack>
  11. #include <ctime>
  12. #include <iostream>
  13. #include <functional>
  14. #include <complex>
  15. #include <stdlib.h>
  16. #include <fstream>
  17. #include <random>
  18. #include <csignal>
  19.  
  20. using namespace std;
  21.  
  22. typedef long long ll;
  23. typedef pair<int, int> pii;
  24. typedef pair<double, double> pdd;
  25. typedef pair<pii, int> p3i;
  26. typedef vector<int> vi;
  27. typedef vector<pii> vii;
  28. typedef vector<p3i> v3i;
  29. typedef vector<vii> vvii;
  30. typedef vector<p3i> vp3i;
  31. typedef long double ld;
  32. typedef vector<ld> vld;
  33.  
  34. #define pb push_back
  35. #define mp make_pair
  36. #define REP(i, n) for (int (i) = 0; (i) < (n); (i)++)
  37. #define REPD(i, n) for (int (i) = (n) - 1; (i) >= 0; (i)--)
  38. #define FOR(i, a, b) for (int (i) = (a); (i) < (b); (i)++)
  39. #define FORD(i,a, b) for (int (i) = (a); (i) >= (b); (i)--)
  40. #define sz(v) (int)(v).size()
  41. #define all(v) (v).begin(), (v).end()
  42. #define rv(v) reverse(all(v))
  43. #define CL(v, val) memset((v), (val), sizeof((v)))
  44. #define SORT(a) sort(all(a))
  45. #define un(v) SORT(v), (v).resize(unique(all(v)) - (v).begin())
  46. #define eps 1.0e-9
  47. #define X first
  48. #define Y second
  49. #define bit(n) (1 << (n))
  50. #define bit64(n) (ll(1) << (n))
  51. #define sqr(x) ((x) * (x))
  52. #define sq5(x) ((x) * (x) * (x) * (x) * (x))
  53. #define N 200005
  54.  
  55. vector<pair<ll, ll> > Hull[N];
  56.  
  57. bool isBad(pair<ll, ll> a, pair<ll, ll> b, pair<ll, ll> c) {
  58. return 1.0 * (c.Y - a.Y) / (a.X - c.X) - 1.0 * (b.Y - a.Y) / (a.X - b.X) < eps;
  59. }
  60.  
  61. void addLine(vector<pair<ll, ll> > &hull, pair<ll, ll> nw) {
  62. /*if (sz(hull) && hull.back().X == nw.X) {
  63. if (hull.back().Y <= nw.Y) {
  64. return;
  65. }
  66. hull.pop_back();
  67. }*/
  68. while (sz(hull) >= 2 && isBad(hull[sz(hull) - 2], hull[sz(hull) - 1], nw)) {
  69. hull.pop_back();
  70. }
  71. hull.pb(nw);
  72. }
  73.  
  74. int p[N];
  75.  
  76. ll f(pair<ll, ll> line, ll t) {
  77. return line.X * t + line.Y;
  78. }
  79.  
  80. ll query(int id, ll t) {
  81. if (p[id] >= sz(Hull[id])) {
  82. p[id] = sz(Hull[id]) - 1;
  83. }
  84.  
  85. while (p[id] < sz(Hull[id]) - 1 && f(Hull[id][p[id]], t) > f(Hull[id][p[id] + 1], t)) {
  86. p[id]++;
  87. }
  88.  
  89. return f(Hull[id][p[id]], t);
  90. }
  91.  
  92. map<ll, pair<int, pair<ll, ll> > > tIn, tOut;
  93.  
  94. int main(void) {
  95. int n, m;
  96. scanf("%d%d", &n, &m);
  97. addLine(Hull[0], mp(0, 0));
  98.  
  99. vector<ll> times;
  100. REP(i, m) {
  101. int x, y;
  102. ll s, e;
  103. scanf("%d%d%lld%lld", &x, &y, &s, &e);
  104. x--, y--;
  105. times.pb(s);
  106. times.pb(e);
  107.  
  108. /*if (s == e && n < 51) {
  109. return -1;
  110. }*/
  111.  
  112. tOut[s] = mp(x, mp(y, e));
  113. }
  114.  
  115. un(times);
  116. ll ans = -1;
  117. REP(i, sz(times)) {
  118. ll t = times[i];
  119.  
  120. if (tOut.count(t)) {
  121. int u = tOut[t].X;
  122. int v = tOut[t].Y.X;
  123. ll t2 = tOut[t].Y.Y;
  124. if (sz(Hull[u]) == 0) {
  125. continue;
  126. }
  127. ll q = query(u, t);
  128. ll tmp = sqr(t) + q;
  129. if (v == n - 1) {
  130. if (ans == -1 || ans > tmp) {
  131. ans = tmp;
  132. }
  133. }
  134. tIn[t2] = mp(v, mp(-2ll * t2, sqr(t2) + tmp));
  135. }
  136.  
  137.  
  138. if (tIn.count(t)) {
  139. int v = tIn[t].X;
  140. pair<ll, ll> line = tIn[t].Y;
  141. addLine(Hull[v], line);
  142. }
  143. }
  144.  
  145. printf("%lld\n", ans);
  146.  
  147. }
  148.  
  149. /*
  150.  
  151. 2 3
  152. 1 1 1 1
  153. 1 1 2 3
  154. 1 2 4 5
  155.  
  156. 2 2
  157. 1 1 2 4
  158. 1 2 3 5
  159.  
  160. 3 3
  161. 1 2 1 1
  162. 1 3 3 3
  163. 2 3 2 4
  164.  
  165. 3 3
  166. 1 2 2 2
  167. 2 3 6 9
  168. 1 3 5 100
  169.  
  170. */
Advertisement
Add Comment
Please, Sign In to add comment