From 714fcc3e5448c3fd730a8faf88730a279f1c4654 Mon Sep 17 00:00:00 2001
From: Bruno Freitas Tissei <bft15@inf.ufpr.br>
Date: Mon, 19 Aug 2019 18:31:23 -0300
Subject: [PATCH] Add Heavy Light Decomposition

Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br>
---
 algorithms/geometry/rotating_calipers.cpp  |  41 +++
 algorithms/graph/hld.cpp                   | 141 ++++++++
 algorithms/graph/lca.cpp                   |  21 +-
 algorithms/structure/lazy_segment_tree.cpp |  12 +-
 algorithms/structure/segment_tree.cpp      |  66 +++-
 contests/Cadernaveis/LA5138.cpp            |  95 ++++++
 contests/Cadernaveis/a.out                 | Bin 0 -> 51416 bytes
 contests/Cadernaveis/in                    |  10 +
 contests/Cadernaveis/out                   | 369 +++++++++++++++++++++
 9 files changed, 723 insertions(+), 32 deletions(-)
 create mode 100644 algorithms/geometry/rotating_calipers.cpp
 create mode 100644 algorithms/graph/hld.cpp
 create mode 100644 contests/Cadernaveis/LA5138.cpp
 create mode 100755 contests/Cadernaveis/a.out
 create mode 100644 contests/Cadernaveis/in
 create mode 100644 contests/Cadernaveis/out

diff --git a/algorithms/geometry/rotating_calipers.cpp b/algorithms/geometry/rotating_calipers.cpp
new file mode 100644
index 0000000..65fd15e
--- /dev/null
+++ b/algorithms/geometry/rotating_calipers.cpp
@@ -0,0 +1,41 @@
+/// Rotating Calipers
+///
+/// Time: O(n log n)
+/// Space: O(n)
+
+double dist(point a, point b) {
+  return hypot(a.fi - b.fi, a.se - b.se);
+}
+
+double area(point a, point b, point c) {
+  return abs((b.fi - a.fi) * (c.se - a.se) - \
+             (b.se - a.se) * (c.fi - a.fi));
+}
+
+double diameter(vector<point> &v) {
+  vector<point> h = convex_hull(v);
+
+  int m = h.size();
+  if (m == 1) return 0;
+  if (m == 2) return dist(h[0], h[1]);
+
+  int k = 1;
+  while (area(h[m-1], h[0], h[(k+1)%m]) > 
+         area(h[m-1], h[0], h[k]))
+    k++;
+
+  double ans = 0;
+  for (int i = 0, j = k; i <= k && j < m; ++i) {
+    ans = max(ans, dist(h[i], h[j]));
+
+    while (i < m && 
+        area(h[i], h[(i+1)%m], h[(j+1)%m]) > 
+        area(h[i], h[(i+1)%m], h[j])) 
+    {
+      ans = max(ans, dist(h[i], h[(j+1)%m]));
+      j++;
+    }
+  }
+
+  return ans;
+}
diff --git a/algorithms/graph/hld.cpp b/algorithms/graph/hld.cpp
new file mode 100644
index 0000000..777dc7b
--- /dev/null
+++ b/algorithms/graph/hld.cpp
@@ -0,0 +1,141 @@
+/// Heavy Light Decomposition
+///
+/// Time: 
+///   - build: O(n log n)
+///   - query: O(log^2 n)
+///   - update: O(log n)
+/// Space: O(n log n)
+
+#define LOG 20 // log2(MAX)
+
+ii edge[MAX];
+int par[MAX][LOG];
+vector<ii> graph[MAX];
+ 
+template <typename ST>
+struct HLD {
+  ST &seg;
+  int cnum, ptr;
+  
+  // Size of subtree, and depth
+  vector<int> size, dep;
+
+  // Chain's head, chain's index, base array for segtree, 
+  // position of node in base, and bottommost node
+  vector<int> chead, cidx, base, pos, bot;
+ 
+  HLD(int n, ST &seg) :
+    seg(seg), size(n), dep(n, 0), bot(n),
+    chead(n, -1), cidx(n), base(n), pos(n)
+  {
+    mset(par, -1);
+    cnum = ptr = 0;
+ 
+    dfs(0);
+    decompose(0);
+ 
+    N = ptr; // global N for segtree
+    seg.build(base);
+ 
+    // bot[i] stores the bottommost (depth-wise) node
+    // on the i-th edge
+    for (int i = 0; i < N - 1; ++i)
+      if (dep[edge[i].fi] > dep[edge[i].se])
+        bot[i] = edge[i].fi;
+      else
+        bot[i] = edge[i].se;
+  }
+ 
+  void dfs(int x, int p = -1) {
+    size[x] = 1;
+    par[x][0] = p;
+ 
+    for (int i = 1; i < LOG; ++i)
+      if (par[x][i - 1] != -1)
+        par[x][i] = par[par[x][i - 1]][i - 1];
+ 
+    for (auto i : graph[x])
+      if (i.fi != p) {
+        dep[i.fi] = dep[x] + 1;
+        dfs(i.fi, x);
+        size[x] += size[i.fi];
+      }
+  }
+ 
+  void decompose(int x, int c = -1, int p = -1) {
+    if (chead[cnum] == -1)
+      chead[cnum] = x;
+ 
+    pos[x] = ptr;
+    cidx[x] = cnum;
+    base[ptr++] = c;
+ 
+    ii sc(-1, -1);
+    if (graph[x].size() > 1) {
+      for (auto i : graph[x])
+        if (i.fi != p)
+          if (sc.fi == -1 || size[sc.fi] < size[i.fi])
+            sc = i;
+
+      decompose(sc.fi, sc.se, x);
+    }
+ 
+    for (auto i : graph[x])
+      if (sc.fi != i.fi && i.fi != p) {
+        cnum++;
+        decompose(i.fi, i.se, x); 
+      }
+  }
+ 
+  int query_up(int a, int b) {
+    if (a == b) return 0;
+ 
+    int ca, cb = cidx[b], ans = -1;
+    while (1) {
+      ca = cidx[a];
+      if (ca == cb) {
+        if (a == b) break;
+        ans = max(ans, seg.query(pos[b] + 1, pos[a]));
+        break;
+      }
+ 
+      ans = max(ans, seg.query(pos[chead[ca]], pos[a]));
+      a = par[chead[ca]][0];
+    }
+ 
+    return ans;
+  }
+ 
+  int lca(int a, int b) {
+    int ans = 0;
+ 
+    if (dep[a] < dep[b])
+      swap(a, b);
+ 
+    for (int i = LOG - 1; i >= 0; --i)
+      if (par[a][i] != -1 && dep[par[a][i]] >= dep[b])
+        a = par[a][i];
+ 
+    if (a == b)
+      return a;
+ 
+    for (int i = LOG - 1; i >= 0; --i)
+      if (par[a][i] != -1 && par[a][i] != par[b][i]) {
+        a = par[a][i];
+        b = par[b][i];
+      }
+ 
+    return par[a][0];
+  }
+ 
+  // Queries max edge on the path between a and b
+  int query(int a, int b) {
+    int lab = lca(a, b);
+    return max(query_up(a, lab), query_up(b, lab));
+  }
+ 
+  // Updates value of i-th edge
+  void update(int i, int val) {
+    seg.update(pos[bot[i]], val);
+  }
+};
diff --git a/algorithms/graph/lca.cpp b/algorithms/graph/lca.cpp
index a0efdf7..51bd1cf 100644
--- a/algorithms/graph/lca.cpp
+++ b/algorithms/graph/lca.cpp
@@ -17,24 +17,21 @@
 ///   - query:      O(log V)
 /// Space: O(V + E + V log V)
 
-#define MAXLOG 20 //log2(MAX)
+#define LOG 20 // log2(MAX)
 
 vector<ii> graph[MAX];
+int par[MAX][LOG], cost[MAX][LOG];
 
 struct LCA {
   vector<int> h;
-  vector<vector<int>> par, cost;
 
-  LCA(int N) :
-    h(N), 
-    par(N, vector<int>(MAXLOG)), 
-    cost(N, vector<int>(MAXLOG))
+  LCA(int N) : h(N)
   { init(); }
 
   void init() {
-    for (auto &i : par) fill(all(i), -1); 
-    for (auto &i : cost) fill(all(i), 0);
-    dfs(0); // 0-indexed vertices
+    mset(par, -1);
+    mset(cost, 0);
+    dfs(0); // root is 0
   }
 
   int op(int a, int b) {
@@ -48,7 +45,7 @@ struct LCA {
     if (p != -1)
       h[v] = h[p] + 1;
 
-    for (int i = 1; i < MAXLOG; ++i)
+    for (int i = 1; i < LOG; ++i)
       if (par[v][i - 1] != -1) {
         par[v][i] = par[par[v][i - 1]][i - 1];
         cost[v][i] = op(cost[v][i], op(cost[v][i-1],
@@ -66,7 +63,7 @@ struct LCA {
     if (h[a] < h[b])
       swap(a, b);
 
-    for (int i = MAXLOG - 1; i >= 0; --i)
+    for (int i = LOG - 1; i >= 0; --i)
       if (par[a][i] != -1 && h[par[a][i]] >= h[b]) {
         ans = op(ans, cost[a][i]);
         a = par[a][i];
@@ -80,7 +77,7 @@ struct LCA {
       #endif
     }
 
-    for (int i = MAXLOG - 1; i >= 0; --i)
+    for (int i = LOG - 1; i >= 0; --i)
       if (par[a][i] != -1 && par[a][i] != par[b][i]) {
         ans = op(ans, op(cost[a][i], cost[b][i]));
         a = par[a][i];
diff --git a/algorithms/structure/lazy_segment_tree.cpp b/algorithms/structure/lazy_segment_tree.cpp
index b3d95f7..e2d45de 100644
--- a/algorithms/structure/lazy_segment_tree.cpp
+++ b/algorithms/structure/lazy_segment_tree.cpp
@@ -5,6 +5,10 @@
 ///   - update: O(log n)
 ///   - query:  O(log n)
 /// Space: O(n)
+///
+/// Caution:
+///   - Provide value for N before any operation
+///   - Provide identity value if necessary (default is T())
 
 #define left(x) (x << 1)
 #define right(x) ((x << 1) + 1)
@@ -15,14 +19,12 @@ template <typename T>
 struct LazySegmentTree {
   using func = function<T(T,T)>;
 
-  T id;
   func op;
+  T id = T();
   vector<T> tree, lazy;
 
-  LazySegmentTree(vector<T> &v, func op, T id=T()) : 
-    tree(MAX*4, 0), lazy(MAX*4, 0),
-    op(op), id(id)
-  { build(v); }
+  LazySegmentTree(func op) : 
+    op(op), tree(MAX*4, 0), lazy(MAX*4, 0) {}
 
   void build(const vector<T> &v, 
       int node = 1, int l = 0, int r = N - 1) 
diff --git a/algorithms/structure/segment_tree.cpp b/algorithms/structure/segment_tree.cpp
index c62f76d..50727c5 100644
--- a/algorithms/structure/segment_tree.cpp
+++ b/algorithms/structure/segment_tree.cpp
@@ -6,33 +6,69 @@
 /// Space: O(n)
 ///
 /// Caution:
-///   - Query returns $op([l,r))$
+///   - Provide value for N before any operation
 ///   - Provide identity value if necessary (default is T())
 
+#define left(x) (x << 1)
+#define right(x) ((x << 1) + 1)
+
+int N;
+
 template <typename T>
 struct SegmentTree {
   using func = function<T(T,T)>;
 
-  T id;
-  int N;
   func op;
+  T ident = T();
   vector<T> tree;
 
-  SegmentTree(int N, func op, T id = T()) : 
-    N(N), op(op), id(id), tree(2*N, id) {}
+  SegmentTree(func op) : 
+    op(op), tree(MAX*4) {}
+
+  void build(const vector<T> &v, 
+      int node = 1, int l = 0, int r = N - 1) 
+  {
+    if (l > r) 
+      return;
 
-  void update(int idx, T val) {
-    tree[idx + N] = val;
-    for (idx += N; idx > 1; idx/=2)
-      tree[idx/2] = op(tree[idx & ~1], tree[idx | 1]);
+    if (l == r)
+      tree[node] = v[l];
+    else {
+      int m = (l + r) / 2;
+      build(v, left(node), l, m);
+      build(v, right(node), m + 1, r);
+      tree[node] = op(tree[left(node)], tree[right(node)]);
+    }
   }
 
-  T query(int l, int r) {
-    T ans = id;
-    for (l += N, r += N ; l < r; l/=2, r/=2) {
-      if (l & 1) ans = op(ans, tree[l++]);
-      if (r & 1) ans = op(ans, tree[--r]);
+  void update(int i, T val, 
+      int node = 1, int l = 0, int r = N - 1) 
+  {
+    if (l > r || l > i || r < i) 
+      return;
+
+    if (l == r)
+      tree[node] = val;
+    else {
+      int m = (l + r) / 2;
+      update(i, val, left(node), l, m);
+      update(i, val, right(node), m + 1, r);
+      tree[node] = op(tree[left(node)], tree[right(node)]);
     }
-    return ans;
+  }
+
+  T query(int i, int j, 
+      int node = 1, int l = 0, int r = N - 1)
+  {
+    if (l > r || l > j || r < i) 
+      return ident;
+
+    if (l >= i && r <= j)
+      return tree[node];
+
+    int m = (l + r) / 2;
+    T q1 = query(i, j, left(node), l, m);
+    T q2 = query(i, j, right(node), m + 1, r);
+    return op(q1, q2);
   }
 };
diff --git a/contests/Cadernaveis/LA5138.cpp b/contests/Cadernaveis/LA5138.cpp
new file mode 100644
index 0000000..732fc82
--- /dev/null
+++ b/contests/Cadernaveis/LA5138.cpp
@@ -0,0 +1,95 @@
+#include <bits/stdc++.h>
+
+#define EPS 1e-6
+#define MOD 1000000007
+#define inf 0x3f3f3f3f
+#define llinf 0x3f3f3f3f3f3f3f3f
+
+#define fi first
+#define se second
+#define pb push_back
+#define ende '\n'
+
+#define all(x) (x).begin(), (x).end()
+#define rall(x) (x).rbegin(), (x).rend()
+#define mset(x, y) memset(&x, (y), sizeof(x))
+
+using namespace std; 
+
+using ll = long long;
+using ii = pair<int,int>;
+
+using point = pair<double,double>;
+
+bool cw(point a, point b, point c) {
+  return (b.fi - a.fi) * (c.se - a.se) - \
+    (b.se - a.se) * (c.fi - a.fi) <= 0;
+}
+
+//double cross(point a, point b, point c) {
+//  return (b.fi - a.fi) * (c.se - a.se) - \
+//    (b.se - a.se) * (c.fi - a.fi);
+//}
+double cross(const point &o, const point &a, const point &b) {
+  return (a.fi - o.fi) * (b.se - o.se) - (a.se - o.se) * (b.fi - o.fi);
+}
+
+vector<point> convex_hull(vector<point> &v) {
+  int k = 0;
+  vector<point> ans(v.size() * 2);
+
+  sort(all(v), [](const point &a, const point &b) {
+    return (a.fi == b.fi) ? (a.se < b.se) : (a.fi < b.fi);
+  });
+
+  for (int i = 0; i < v.size(); ++i) {
+    for (; k >= 2 && cw(ans[k-2], ans[k-1], v[i]); --k);
+    ans[k++] = v[i];
+  }
+
+  for (int i = v.size() - 2, t = k + 1; i >= 0; --i) {
+    for (; k >= t && cw(ans[k-2], ans[k-1], v[i]); --k);
+    ans[k++] = v[i];
+  }
+
+  ans.resize(k);
+  return ans;
+}
+
+double dist_line(point p, point a, point b) {
+  return cross(b, a, p) / sqrt((b.se-a.se) * (b.se-a.se) + (b.fi-a.fi)*(b.fi-a.fi));
+}
+
+double width(vector<point> &v) {
+  vector<point> h = convex_hull(v);
+  int n = h.size() - 1;
+  int j = 1;
+
+  double ans = 1e14;
+  h[0] = h[n];
+  for (int i = 1; i <= n; ++i) {
+    while (cross(h[i-1], h[i], h[j%n+1]) > cross(h[i-1], h[i], h[j]))
+      j = j % n + 1;
+    ans = min(ans, dist_line(h[j], h[i], h[i-1]));
+  }
+
+  return ceil(ans*100)/100;
+}
+
+int main() {
+  ios::sync_with_stdio(0);
+  cin.tie(0);
+  cout << setprecision(2) << fixed;
+
+  int n, cas = 1;
+  while (cin >> n && n) {
+    vector<point> v(n);
+    for (int i = 0; i < n; ++i)
+      cin >> v[i].fi >> v[i].se;
+
+    cout << "Case " << cas << ": " << width(v) << ende;
+    cas++;
+  }
+
+  return 0;
+}
diff --git a/contests/Cadernaveis/a.out b/contests/Cadernaveis/a.out
new file mode 100755
index 0000000000000000000000000000000000000000..4768325f00306911ab20830aec41303b7e9a1c5e
GIT binary patch
literal 51416
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
Osz-6;yDGSf#{UIR94m|f

literal 0
HcmV?d00001

diff --git a/contests/Cadernaveis/in b/contests/Cadernaveis/in
new file mode 100644
index 0000000..1f16e89
--- /dev/null
+++ b/contests/Cadernaveis/in
@@ -0,0 +1,10 @@
+3
+0 0
+3 0
+0 4
+4
+0 10
+10 0
+20 10
+10 20
+0
diff --git a/contests/Cadernaveis/out b/contests/Cadernaveis/out
new file mode 100644
index 0000000..6552e7d
--- /dev/null
+++ b/contests/Cadernaveis/out
@@ -0,0 +1,369 @@
+Case 1: 2.40
+Case 2: 14.15
+Case 3: 0.71
+Case 4: 0.71
+Case 5: 0.71
+Case 6: 0.71
+Case 7: 0.71
+Case 8: 0.71
+Case 9: 0.01
+Case 10: 0.01
+Case 11: 0.01
+Case 12: 0.01
+Case 13: 0.01
+Case 14: 0.01
+Case 15: 10000.00
+Case 16: 26.00
+Case 17: 26.00
+Case 18: 26.00
+Case 19: 26.00
+Case 20: 26.00
+Case 21: 26.00
+Case 22: 2.00
+Case 23: 2.00
+Case 24: 2.00
+Case 25: 2.00
+Case 26: 2.00
+Case 27: 2.00
+Case 28: 26.00
+Case 29: 26.00
+Case 30: 26.00
+Case 31: 26.00
+Case 32: 26.00
+Case 33: 26.00
+Case 34: 421.90
+Case 35: 421.90
+Case 36: 421.90
+Case 37: 421.90
+Case 38: 421.90
+Case 39: 421.90
+Case 40: 313.62
+Case 41: 313.62
+Case 42: 313.62
+Case 43: 313.62
+Case 44: 313.62
+Case 45: 313.62
+Case 46: 739.83
+Case 47: 739.83
+Case 48: 739.83
+Case 49: 739.83
+Case 50: 739.83
+Case 51: 739.83
+Case 52: 939.89
+Case 53: 939.89
+Case 54: 939.89
+Case 55: 939.89
+Case 56: 939.89
+Case 57: 939.89
+Case 58: 943.66
+Case 59: 943.66
+Case 60: 943.66
+Case 61: 943.66
+Case 62: 943.66
+Case 63: 943.66
+Case 64: 965.95
+Case 65: 965.95
+Case 66: 965.95
+Case 67: 965.95
+Case 68: 965.95
+Case 69: 965.95
+Case 70: 941.45
+Case 71: 941.45
+Case 72: 941.45
+Case 73: 941.45
+Case 74: 941.45
+Case 75: 941.45
+Case 76: 827.61
+Case 77: 827.61
+Case 78: 827.61
+Case 79: 827.61
+Case 80: 827.61
+Case 81: 827.61
+Case 82: 962.07
+Case 83: 962.07
+Case 84: 962.07
+Case 85: 962.07
+Case 86: 962.07
+Case 87: 962.07
+Case 88: 522.79
+Case 89: 522.79
+Case 90: 522.79
+Case 91: 522.79
+Case 92: 522.79
+Case 93: 522.79
+Case 94: 868.59
+Case 95: 868.59
+Case 96: 868.59
+Case 97: 868.59
+Case 98: 868.59
+Case 99: 868.59
+Case 100: 943.42
+Case 101: 943.42
+Case 102: 943.42
+Case 103: 943.42
+Case 104: 943.42
+Case 105: 943.42
+Case 106: 849.02
+Case 107: 849.02
+Case 108: 849.02
+Case 109: 849.02
+Case 110: 849.02
+Case 111: 849.02
+Case 112: 872.17
+Case 113: 872.17
+Case 114: 872.17
+Case 115: 872.17
+Case 116: 872.17
+Case 117: 872.17
+Case 118: 918.82
+Case 119: 918.82
+Case 120: 918.82
+Case 121: 918.82
+Case 122: 918.82
+Case 123: 918.82
+Case 124: 830.42
+Case 125: 830.42
+Case 126: 830.42
+Case 127: 830.42
+Case 128: 830.42
+Case 129: 830.42
+Case 130: 887.99
+Case 131: 887.99
+Case 132: 887.99
+Case 133: 887.99
+Case 134: 887.99
+Case 135: 887.99
+Case 136: 819.72
+Case 137: 819.72
+Case 138: 819.72
+Case 139: 819.72
+Case 140: 819.72
+Case 141: 819.72
+Case 142: 916.86
+Case 143: 916.86
+Case 144: 916.86
+Case 145: 916.86
+Case 146: 916.86
+Case 147: 916.86
+Case 148: 894.85
+Case 149: 894.85
+Case 150: 894.85
+Case 151: 894.85
+Case 152: 894.85
+Case 153: 894.85
+Case 154: 907.85
+Case 155: 907.85
+Case 156: 907.85
+Case 157: 907.85
+Case 158: 907.85
+Case 159: 907.85
+Case 160: 897.52
+Case 161: 897.52
+Case 162: 897.52
+Case 163: 897.52
+Case 164: 897.52
+Case 165: 897.52
+Case 166: 698.88
+Case 167: 698.88
+Case 168: 698.88
+Case 169: 698.88
+Case 170: 698.88
+Case 171: 698.88
+Case 172: 520.04
+Case 173: 520.04
+Case 174: 520.04
+Case 175: 520.04
+Case 176: 520.04
+Case 177: 520.04
+Case 178: 948.53
+Case 179: 948.53
+Case 180: 948.53
+Case 181: 948.53
+Case 182: 948.53
+Case 183: 948.53
+Case 184: 890.01
+Case 185: 890.01
+Case 186: 890.01
+Case 187: 890.01
+Case 188: 890.01
+Case 189: 890.01
+Case 190: 863.93
+Case 191: 863.93
+Case 192: 863.93
+Case 193: 863.93
+Case 194: 863.93
+Case 195: 863.93
+Case 196: 902.07
+Case 197: 902.07
+Case 198: 902.07
+Case 199: 902.07
+Case 200: 902.07
+Case 201: 902.07
+Case 202: 841.60
+Case 203: 841.60
+Case 204: 841.60
+Case 205: 841.60
+Case 206: 841.60
+Case 207: 841.60
+Case 208: 887.03
+Case 209: 887.03
+Case 210: 887.03
+Case 211: 887.03
+Case 212: 887.03
+Case 213: 887.03
+Case 214: 677.03
+Case 215: 677.03
+Case 216: 677.03
+Case 217: 677.03
+Case 218: 677.03
+Case 219: 677.03
+Case 220: 917.60
+Case 221: 917.60
+Case 222: 917.60
+Case 223: 917.60
+Case 224: 917.60
+Case 225: 917.60
+Case 226: 699.30
+Case 227: 699.30
+Case 228: 699.30
+Case 229: 699.30
+Case 230: 699.30
+Case 231: 699.30
+Case 232: 781.85
+Case 233: 781.85
+Case 234: 781.85
+Case 235: 781.85
+Case 236: 781.85
+Case 237: 781.85
+Case 238: 635.53
+Case 239: 635.53
+Case 240: 635.53
+Case 241: 635.53
+Case 242: 635.53
+Case 243: 635.53
+Case 244: 846.09
+Case 245: 846.09
+Case 246: 846.09
+Case 247: 846.09
+Case 248: 846.09
+Case 249: 846.09
+Case 250: 553.25
+Case 251: 553.25
+Case 252: 553.25
+Case 253: 553.25
+Case 254: 553.25
+Case 255: 553.25
+Case 256: 971.14
+Case 257: 971.14
+Case 258: 971.14
+Case 259: 971.14
+Case 260: 971.14
+Case 261: 971.14
+Case 262: 834.71
+Case 263: 834.71
+Case 264: 834.71
+Case 265: 834.71
+Case 266: 834.71
+Case 267: 834.71
+Case 268: 857.93
+Case 269: 857.93
+Case 270: 857.93
+Case 271: 857.93
+Case 272: 857.93
+Case 273: 857.93
+Case 274: 929.54
+Case 275: 929.54
+Case 276: 929.54
+Case 277: 929.54
+Case 278: 929.54
+Case 279: 929.54
+Case 280: 882.55
+Case 281: 882.55
+Case 282: 882.55
+Case 283: 882.55
+Case 284: 882.55
+Case 285: 882.55
+Case 286: 920.93
+Case 287: 920.93
+Case 288: 920.93
+Case 289: 920.93
+Case 290: 920.93
+Case 291: 920.93
+Case 292: 885.83
+Case 293: 885.83
+Case 294: 885.83
+Case 295: 885.83
+Case 296: 885.83
+Case 297: 885.83
+Case 298: 969.79
+Case 299: 969.79
+Case 300: 969.79
+Case 301: 969.79
+Case 302: 969.79
+Case 303: 969.79
+Case 304: 935.10
+Case 305: 935.10
+Case 306: 935.10
+Case 307: 935.10
+Case 308: 935.10
+Case 309: 935.10
+Case 310: 821.22
+Case 311: 821.22
+Case 312: 821.22
+Case 313: 821.22
+Case 314: 821.22
+Case 315: 821.22
+Case 316: 936.47
+Case 317: 936.47
+Case 318: 936.47
+Case 319: 936.47
+Case 320: 936.47
+Case 321: 936.47
+Case 322: 669.83
+Case 323: 669.83
+Case 324: 669.83
+Case 325: 669.83
+Case 326: 669.83
+Case 327: 669.83
+Case 328: 937.78
+Case 329: 937.78
+Case 330: 937.78
+Case 331: 937.78
+Case 332: 937.78
+Case 333: 937.78
+Case 334: 911.71
+Case 335: 911.71
+Case 336: 911.71
+Case 337: 911.71
+Case 338: 911.71
+Case 339: 911.71
+Case 340: 878.29
+Case 341: 878.29
+Case 342: 878.29
+Case 343: 878.29
+Case 344: 878.29
+Case 345: 878.29
+Case 346: 911.88
+Case 347: 911.88
+Case 348: 911.88
+Case 349: 911.88
+Case 350: 911.88
+Case 351: 911.88
+Case 352: 819.50
+Case 353: 819.50
+Case 354: 819.50
+Case 355: 819.50
+Case 356: 819.50
+Case 357: 819.50
+Case 358: 914.16
+Case 359: 914.16
+Case 360: 914.16
+Case 361: 914.16
+Case 362: 914.16
+Case 363: 914.16
+Case 364: 525.55
+Case 365: 525.55
+Case 366: 525.55
+Case 367: 525.55
+Case 368: 525.55
+Case 369: 525.55
-- 
GitLab