[{"data":1,"prerenderedAt":5754},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":374,"course-wordcounts":5622,"ref-card-index":5678},[4,28,50,71,120,152,205,230,286,306,331,352],{"module":5,"moduleNumber":6,"slug":7,"lessons":8},"Foundations",1,"foundations",[9,15,21],{"title":10,"path":11,"lessonNumber":6,"topics":12,"summary":14},"What Is an Algorithm?","\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm",[5,13],"Correctness & Induction","An algorithm is a finite, mechanical recipe that transforms inputs into outputs. We pin down what counts as an algorithm, how we write one down, and the three things we always ask of it: is it correct, is it fast, and can we prove it.\n",{"title":16,"path":17,"lessonNumber":18,"topics":19,"summary":20},"Asymptotic Analysis","\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis",2,[16],"We measure an algorithm's running time as a function of its input size, then strip away machine-specific constants and lower-order terms to compare algorithms cleanly. This lesson defines the RAM model and the $O$, $\\Omega$, $\\Theta$, $o$, and $\\omega$ notations, and shows how to read the cost of loops off the page.\n",{"title":22,"path":23,"lessonNumber":24,"topics":25,"summary":27},"Recurrences and the Master Theorem","\u002Falgorithms\u002Ffoundations\u002Frecurrences",3,[26],"Recurrences","Recursive and divide-and-conquer algorithms describe their own running time with a recurrence: $T(n)$ in terms of $T$ on smaller inputs. We solve recurrences three ways — drawing the recursion tree, guessing-and-verifying by induction, and applying the Master Theorem — using merge sort as the running example.\n",{"module":29,"moduleNumber":18,"slug":30,"lessons":31},"Divide & Conquer","divide-and-conquer",[32,38,44],{"title":33,"path":34,"lessonNumber":6,"topics":35,"summary":37},"Divide and Conquer & Mergesort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort",[29,36],"Comparison Sorting","Divide and conquer breaks a problem into smaller copies of itself, solves them recursively, and stitches the answers together. We meet the paradigm through mergesort — its merge step, its loop-invariant proof, and the recursion tree that pins its cost at $\\Theta(n\\log n)$ — then glimpse Karatsuba multiplication as a second example of the same idea.",{"title":39,"path":40,"lessonNumber":18,"topics":41,"summary":43},"Quicksort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort",[36,42],"Probabilistic Analysis","Quicksort sorts in place by partitioning around a pivot and recursing on each side. We give Lomuto and Hoare partitioning with a correctness invariant, see why a bad pivot costs $\\Theta(n^2)$ while a balanced one gives $\\Theta(n\\log n)$, and prove that randomizing the pivot makes the expected cost $\\Theta(n\\log n)$ on every input.",{"title":45,"path":46,"lessonNumber":24,"topics":47,"summary":49},"Linear-Time Selection","\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection",[48,29],"Order Statistics","Finding the $k$-th smallest element looks like it should require sorting, but it does not. Quickselect adapts quicksort's partition to recurse on just one side, achieving expected $O(n)$. The median-of-medians algorithm guarantees a good pivot with the groups-of-five trick, pushing the worst case down to a provable $O(n)$.",{"module":51,"moduleNumber":24,"slug":52,"lessons":53},"Sorting & Order Statistics","sorting",[54,60,65],{"title":55,"path":56,"lessonNumber":6,"topics":57,"summary":59},"Heaps and Heapsort","\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort",[58,36],"Heaps","A binary heap is a tree we store flat in an array, with index arithmetic standing in for pointers. We build the max-heap property bottom-up in $O(n)$ time, sort in place in $\\Theta(n\\log n)$ by repeatedly extracting the maximum, and reuse the same structure to implement a priority queue.",{"title":61,"path":62,"lessonNumber":18,"topics":63,"summary":64},"Lower Bounds for Comparison Sorting","\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds",[36],"Every sort we have seen runs in $\\Omega(n\\log n)$, and that is no accident. Modeling a sort as a decision tree of comparisons, we show any such tree must have $n!$ leaves, forcing height $\\ge \\log_2(n!) = \\Omega(n\\log n)$ — a worst-case bound no comparison sort can ever beat.",{"title":66,"path":67,"lessonNumber":24,"topics":68,"summary":70},"Sorting in Linear Time","\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting",[69],"Linear-Time Sorting","The $\\Omega(n\\log n)$ barrier only binds algorithms that compare. By instead using keys as array indices we slip past it: counting sort runs in $\\Theta(n+k)$ and is stable, radix sort layers it digit by digit, and bucket sort averages $\\Theta(n)$ on uniform data. We see exactly when each applies.",{"module":72,"moduleNumber":73,"slug":74,"lessons":75},"Data Structures",4,"data-structures",[76,82,88,93,99,105,113],{"title":77,"path":78,"lessonNumber":6,"topics":79,"summary":81},"Elementary Data Structures","\u002Falgorithms\u002Fdata-structures\u002Felementary-structures",[80],"Linear Structures","Every container is built one of two ways: **contiguous** in an array, or **linked** through pointers. We trade cache-friendly random access against $O(1)$ splicing, derive the **amortized $O(1)$** append of a doubling dynamic array, and assemble the two ordered access disciplines — the LIFO **stack** and the FIFO **queue** (with its generalization, the **deque**) — on top of both.",{"title":83,"path":84,"lessonNumber":18,"topics":85,"summary":87},"Hash Tables","\u002Falgorithms\u002Fdata-structures\u002Fhash-tables",[86],"Hashing","A hash table implements the dictionary — insert, search, delete — in expected $O(1)$ time by scattering keys across an array with a hash function. We build up from direct addressing, handle collisions by chaining and by open addressing, analyze the load factor $\\alpha$, and see how universal hashing earns its expected-time guarantee against every input.",{"title":89,"path":90,"lessonNumber":24,"topics":91,"summary":92},"Binary Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees",[89],"A binary search tree keeps keys ordered so that every operation follows a single root-to-leaf path. We state the BST property, give search and insert, find minimum, maximum, and successor, see that an inorder walk emits the keys in sorted order, and confront the catch — every operation costs $O(h)$, and a carelessly built tree degrades to height $h = \\Theta(n)$, motivating balance.",{"title":94,"path":95,"lessonNumber":73,"topics":96,"summary":98},"AVL Trees","\u002Falgorithms\u002Fdata-structures\u002Favl-trees",[97],"Balanced Trees","An AVL tree is the first balanced BST: at every node the two subtrees' heights differ by at most $1$. A Fibonacci-style minimal-node argument forces height $h \\le 1.44\\log_2 n = O(\\log n)$, so search, insert, and delete are all $O(\\log n)$. Insertion rebalances with at most one of four rotation cases (LL, RR, LR, RL); deletion may rotate all the way to the root.",{"title":100,"path":101,"lessonNumber":102,"topics":103,"summary":104},"Balanced Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees",5,[97],"An ordinary BST can degrade to height $\\Theta(n)$; balanced search trees guarantee $h = O(\\log n)$ by maintaining invariants and repairing them after every update. We meet rotations, the local restructuring primitive, then red-black trees, whose color invariants force logarithmic height, and finally B-trees, which trade tall-and-thin for short-and-wide to win on disk.",{"title":106,"path":107,"lessonNumber":108,"topics":109,"summary":112},"Disjoint Sets (Union-Find)","\u002Falgorithms\u002Fdata-structures\u002Funion-find",6,[110,111],"Disjoint Sets","Amortized Analysis","The disjoint-set data structure tracks a partition of elements into groups, answering \"are these two in the same group?\" and merging groups on demand. A forest of parent pointers, sped up by union by rank and path compression, drives every operation to near-constant $O(\\alpha(n))$ amortized time — the engine behind connectivity queries and Kruskal's minimum spanning tree.",{"title":114,"path":115,"lessonNumber":116,"topics":117,"summary":119},"Fenwick & Segment Trees","\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees",7,[118],"Range Queries","A prefix-sum array answers a range sum in $O(1)$ but pays $O(n)$ per update; a plain array updates in $O(1)$ but pays $O(n)$ per range sum. Fenwick and segment trees give us _both_ in $O(\\log n)$. The Fenwick (binary indexed) tree is a tiny array keyed by the low bit; the segment tree is a general balanced tree over canonical ranges that handles any associative aggregate and, with lazy propagation, range updates too.",{"module":121,"moduleNumber":102,"slug":122,"lessons":123},"Sequences & Strings","sequences",[124,130,135,141,147],{"title":125,"path":126,"lessonNumber":6,"topics":127,"summary":129},"Two Pointers, Sliding Windows & Prefix Sums","\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows",[128],"Array Techniques","A family of array idioms that collapse an obvious $O(n^2)$ scan into a single $O(n)$ pass by maintaining an invariant as indices move. We meet two pointers (converging on a sorted array, and a fast\u002Fslow pair for in-place rewriting), the sliding window (fixed and variable size, amortized $O(n)$), and prefix sums, which answer any range-sum in $O(1)$ and count subarrays summing to $k$.",{"title":131,"path":132,"lessonNumber":18,"topics":133,"summary":134},"Monotonic Stacks & Queues","\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks",[128],"A **monotonic stack** keeps its contents sorted by popping every element that would break the order before each push — turning a family of \"previous\u002Fnext greater (or smaller) element\" questions into a single $O(n)$ scan. We derive the next-greater-element routine and its amortized analysis, fuse two such scans to measure the **largest rectangle in a histogram** in linear time, and extend the idea to a **monotonic deque** that streams the **sliding-window maximum** in $O(n)$.",{"title":136,"path":137,"lessonNumber":24,"topics":138,"summary":140},"Binary Search on the Answer","\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer",[139],"Searching","Binary search is not really about arrays — it is about locating the boundary of a **monotone predicate** $p(x)$ in $O(\\log(\\text{range}))$ probes. We first pin down the half-open `while (lo \u003C hi)` template for $\\textsc{lower\\_bound}$ and $\\textsc{upper\\_bound}$, then generalize to \"binary search on the answer\": whenever feasibility is monotone in a numeric parameter, we binary search the parameter itself, calling a feasibility check at each step.",{"title":142,"path":143,"lessonNumber":73,"topics":144,"summary":146},"String Matching: Rabin–Karp, KMP & Z","\u002Falgorithms\u002Fsequences\u002Fstring-matching",[145],"Strings","Given a text $T$ of length $n$ and a pattern $P$ of length $m$, find every occurrence of $P$ in $T$. The naive scan costs $O(nm)$; we beat it three ways. Rabin–Karp uses a **rolling hash** to test alignments in $O(1)$ amortised each, with expected $O(n+m)$. KMP precomputes a **failure function** so the scan never re-reads a text character, for worst-case $O(n+m)$. The **Z-function** gives the same bound from a different angle and converts freely to KMP's table.",{"title":148,"path":149,"lessonNumber":102,"topics":150,"summary":151},"Tries & Prefix Trees","\u002Falgorithms\u002Fsequences\u002Ftries",[145],"A **trie** stores a set of strings in a tree keyed by _characters_, so that insert, search, and prefix-test all run in $O(L)$ time — the length of the key, _independent of how many keys are stored_. Shared prefixes are stored once, which makes tries the natural structure for autocomplete, wildcard dictionaries, board word-search, and — over the alphabet $\\{0,1\\}$ — the maximum-XOR-pair problem.",{"module":153,"moduleNumber":108,"slug":154,"lessons":155},"Graphs","graphs",[156,163,168,173,178,183,188,193,199],{"title":157,"path":158,"lessonNumber":6,"topics":159,"summary":162},"Graph Representations and Traversal","\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal",[160,161],"Graph Representations","Graph Traversal","A graph captures _relationships_ — who connects to whom. We fix the vocabulary, weigh the two standard representations (adjacency list versus matrix), then meet the two explorations you'll use constantly: breadth-first search, which finds shortest paths by number of edges, and depth-first search, whose discovery and finish times reveal a graph's hidden structure. Both run in $O(V + E)$.",{"title":164,"path":165,"lessonNumber":18,"topics":166,"summary":167},"Topological Sort and Strong Connectivity","\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc",[161],"Directed acyclic graphs model dependencies: tasks that must precede other tasks. A _topological order_ lays such a graph out in a line so every edge points forward, and depth-first finish times hand it to us almost for free. We then ask the harder question for graphs _with_ cycles: which vertices can reach each other? The answer is the strongly connected components, found by a two-pass DFS.",{"title":169,"path":170,"lessonNumber":24,"topics":171,"summary":172},"Minimum Spanning Trees","\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees",[169],"Given a weighted network, how do we connect everything as cheaply as possible? The answer is a minimum spanning tree. One lemma, the cut property, justifies _every_ correct MST algorithm, and from it two famous greedy methods fall out: Kruskal's, which grows a forest edge by edge with a union-find structure, and Prim's, which grows a single tree using a priority queue.",{"title":174,"path":175,"lessonNumber":73,"topics":176,"summary":177},"Shortest Paths","\u002Falgorithms\u002Fgraphs\u002Fshortest-paths",[174],"Finding the cheapest route through a weighted network is one of the most-used algorithms in computing. A single operation — _relaxation_ — underlies them all. Dijkstra's algorithm solves the non-negative case greedily; Bellman-Ford handles negative edges and detects negative cycles; and Floyd-Warshall finds the shortest path between _every_ pair of vertices.",{"title":179,"path":180,"lessonNumber":102,"topics":181,"summary":182},"Network Flow","\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow",[179],"How much can flow through a network from source to sink? Max-flow is a surprisingly general model — once you see a problem as flow, a whole toolbox opens up. We build flow networks, find maximum flows by repeatedly pushing along augmenting paths in the residual graph, prove the max-flow min-cut theorem, and watch bipartite matching fall out as a special case.",{"title":184,"path":185,"lessonNumber":108,"topics":186,"summary":187},"Bridges & Articulation Points","\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points",[153],"A **bridge** is an edge whose removal disconnects the graph; an **articulation point** is a vertex whose removal does. Both are single points of failure in a network. A single depth-first search computes discovery times and **low-links**, and two local criteria — $low[v] > disc[u]$ for bridges, $low[v] \\ge disc[u]$ for cut vertices — find them all in $O(V+E)$.",{"title":189,"path":190,"lessonNumber":116,"topics":191,"summary":192},"Lowest Common Ancestor & Binary Lifting","\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor",[153],"Given a rooted tree, the lowest common ancestor of $u$ and $v$ is the deepest node that is an ancestor of both. A naive walk answers one query in $O(h)$; **binary lifting** precomputes the $2^k$-th ancestor of every node in $O(n\\log n)$, then answers $k$-th-ancestor and LCA queries in $O(\\log n)$ each. We derive both jumps, apply them to tree distance, and compare against the Euler-tour + RMQ and Tarjan offline alternatives.",{"title":194,"path":195,"lessonNumber":196,"topics":197,"summary":198},"2-SAT via Implication Graphs","\u002Falgorithms\u002Fgraphs\u002Ftwo-sat",8,[153],"A boolean formula whose every clause has exactly two literals can be solved in _linear_ time — even though its three-literal cousin is NP-complete. The trick is to read each clause as a pair of implications, build a directed graph on the $2n$ literals, and ask a question we already know how to answer: which literals share a strongly connected component? The formula is satisfiable iff no variable lands in the same SCC as its own negation, and the SCCs' topological order hands us a satisfying assignment for free.",{"title":200,"path":201,"lessonNumber":202,"topics":203,"summary":204},"Eulerian Tours","\u002Falgorithms\u002Fgraphs\u002Feulerian-tours",9,[153],"An **Eulerian tour** uses every _edge_ of a graph exactly once. We give the exact parity and balance conditions under which one exists (even degree for undirected graphs, in-degree equal to out-degree for directed) and Hierholzer's $O(E)$ algorithm that constructs one by splicing closed sub-tours. We contrast this sharply with the **Hamiltonian** problem (visit every _vertex_ once), which is NP-complete: visiting edges is easy, visiting vertices is hard.",{"module":206,"moduleNumber":116,"slug":207,"lessons":208},"Greedy Algorithms","greedy",[209,214,220,225],{"title":210,"path":211,"lessonNumber":6,"topics":212,"summary":213},"The Greedy Method","\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method",[206],"A greedy algorithm builds a solution one locally-best choice at a time and never looks back. We pin down the two properties that make this work — the greedy-choice property and optimal substructure — prove the canonical activity-selection algorithm correct with an exchange argument, watch greedy fail spectacularly on the 0\u002F1 knapsack, and glimpse matroids as the theory that says exactly when greed is good.",{"title":215,"path":216,"lessonNumber":18,"topics":217,"summary":219},"Scheduling & Interval Partitioning","\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals",[218],"Greedy","Three classic scheduling problems all yield to greedy algorithms — and all three turn on a single design decision: which key to sort by. Interval scheduling sorts by **finish** time to pack the most compatible jobs; interval partitioning sorts by **start** time and proves the rooms needed equal the maximum overlap **depth**; minimizing maximum lateness sorts by **deadline** and is justified by an adjacent-swap exchange argument.",{"title":221,"path":222,"lessonNumber":24,"topics":223,"summary":224},"Huffman Codes","\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes",[206],"Huffman coding is the greedy method's most beautiful application: it builds a provably optimal prefix-free binary code by repeatedly merging the two least frequent symbols. We develop prefix-free codes as binary trees, give the algorithm with a priority queue, build a Huffman tree from example frequencies, prove optimality with the same greedy-choice-plus-substructure argument, and pin the running time at $O(n\\log n)$.",{"title":226,"path":227,"lessonNumber":73,"topics":228,"summary":229},"Matroids & Exchange Arguments","\u002Falgorithms\u002Fgreedy\u002Fmatroids",[218],"The capstone of the greedy module: _why_ and _when_ a greedy algorithm is provably optimal. We recap the two correctness templates — **greedy-stays-ahead** and the **exchange argument** — then meet the **matroid** $M=(S,\\mathcal{I})$, an abstraction whose **exchange property** is exactly the structure greedy needs. The matroid–greedy theorem says sorting by weight and taking what stays independent yields a maximum-weight basis _if and only if_ the structure is a matroid. Kruskal's MST is the canonical instance; 0\u002F1 knapsack and TSP are the canonical failures.",{"module":231,"moduleNumber":196,"slug":232,"lessons":233},"Dynamic Programming","dynamic-programming",[234,239,245,250,255,260,265,270,275,280],{"title":235,"path":236,"lessonNumber":6,"topics":237,"summary":238},"Principles of Dynamic Programming","\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples",[231,26],"Dynamic programming is recursion with memory: when a recursive solution re-solves the same subproblems again and again, we solve each one once and store the answer. We pin down the two structural conditions that make this work — overlapping subproblems and optimal substructure — contrast top-down memoization with bottom-up tabulation, and distil the whole method into a five-step recipe.",{"title":240,"path":241,"lessonNumber":18,"topics":242,"summary":244},"Sequence Alignment & LCS","\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp",[231,243],"String Structures","Two strings can be compared by asking how much of one survives inside the other. The longest common subsequence (LCS) and edit distance are the two classic answers, and they are the _same_ dynamic program wearing different costs. We derive the LCS recurrence by examining the last characters, fill a worked DP table, reconstruct the subsequence, and then show edit distance as the identical $\\Theta(mn)$ pattern.",{"title":246,"path":247,"lessonNumber":24,"topics":248,"summary":249},"Longest Increasing Subsequence","\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence",[231],"Given a sequence of numbers, how long is its longest strictly increasing subsequence? A first dynamic program indexes subproblems by the element each subsequence _ends at_, giving an $O(n^2)$ solution with parent-pointer reconstruction. A sharper idea, the patience-sorting _tails_ array searched by binary search, drops the time to $O(n\\log n)$. We then fold in the variants: non-decreasing, counting, Russian-doll envelopes, and bitonic.",{"title":251,"path":252,"lessonNumber":73,"topics":253,"summary":254},"Knapsack & Subset Problems","\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack",[231],"We start from $\\textsc{Subset-sum}$ — does some sublist hit a target $t$? — and its include\u002Fexclude recurrence over a boolean table $A(i, u)$, then bolt on values to get 0\u002F1 knapsack as the same machine with $\\lor$ promoted to $\\max$. We fill both tables, recover the chosen items, and confront the surprise that the $\\Theta(nt)$ running time is only _pseudo-polynomial_ — exponential in the bit length $b$, and unimprovable unless $\\mathrm{P}=\\mathrm{NP}$ since subset-sum is $\\textsc{NP-complete}$. The fractional variant reveals the sharp line between greedy and dynamic programming.",{"title":256,"path":257,"lessonNumber":102,"topics":258,"summary":259},"Coin Change & Unbounded Knapsack","\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded",[231],"The previous lesson let each item be taken at most once. Drop that cap — items may be reused _any number of times_ — and the 0\u002F1 knapsack collapses from a two-dimensional table to a one-dimensional one, because there is no longer a prefix of \"already-used\" items to track. We meet **unbounded knapsack**, then its most famous instance, **coin change**: the minimum-coins recurrence $C[a] = 1 + \\min_c C[a-c]$, and the counting variant where the _order of the loops_ decides whether you count unordered combinations or ordered sequences — the classic bug. Greed fails in general but works for canonical coin systems.",{"title":261,"path":262,"lessonNumber":108,"topics":263,"summary":264},"Interval DP","\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp",[231],"Many problems ask for the best way to combine a contiguous range of items, and the answer is a dynamic program over subintervals $[i,j]$ that chooses a split point $k$. We derive the pattern from matrix-chain multiplication — parenthesising a product to minimize scalar multiplications in $O(n^3)$ — distil it into a reusable template filled by increasing interval length, and then meet its sharpest variant: the \"last operation\" trick behind Burst Balloons and cutting a stick, where fixing the _last_ move (not the first) makes the two sides independent.",{"title":266,"path":267,"lessonNumber":116,"topics":268,"summary":269},"Dynamic Programming on Trees","\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp",[231],"When the subproblems of a dynamic program are _rooted subtrees_, a single post-order DFS solves the whole thing in $O(n)$: each node combines the already-computed answers of its children. We meet the archetype — maximum-weight independent set on a tree — then the \"path through a node\" pattern behind tree diameter and maximum path sum, and finally **rerooting**, which computes a per-node answer for _every_ node as root in $O(n)$ with two passes.",{"title":271,"path":272,"lessonNumber":196,"topics":273,"summary":274},"Bitmask DP","\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp",[231],"When a subproblem depends not on an index or a prefix but on _which subset_ of a small ground set has been used, we can encode that subset as the bits of an integer and index a DP table by it. With $n \\le \\sim 20$ the $2^n$ subsets fit in a table, turning $\\Theta(n!)$ brute force into $O(2^n \\cdot \\text{poly}(n))$. We meet the bit tricks, the Held–Karp TSP archetype, assignment by mask, subset-sum partitioning, and submask enumeration with its $3^n$ bound.",{"title":276,"path":277,"lessonNumber":202,"topics":278,"summary":279},"DP Optimizations","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations",[231],"A correct DP recurrence is only half the battle; its naive evaluation is often a factor of $n$ slower than necessary. This capstone surveys five techniques, monotonic-queue, the convex hull trick, divide-and-conquer optimization, Knuth's optimization, and SOS DP, that each exploit _structure in the transition_ (a sliding window, linear costs, monotone optimal splits, the quadrangle inequality, or subset lattices) to shave an $O(n)$, $O(\\log n)$, or worse factor off the running time.",{"title":281,"path":282,"lessonNumber":283,"topics":284,"summary":285},"Dynamic Programming on Graphs","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs",10,[231],"Many graph algorithms are dynamic programs in disguise: the subproblem is the _best value reachable under a restricted resource_ — intermediate vertices allowed, edges allowed, or a topological prefix — and edge _relaxation_ is the DP transition. We frame Floyd–Warshall as the archetype ($O(V^3)$ all-pairs shortest paths), Bellman–Ford as a DP over path length (the at-most-$K$-stops variant), DAG-DP in topological order ($O(V+E)$), and Warshall's transitive closure as the boolean analog.",{"module":287,"moduleNumber":202,"slug":288,"lessons":289},"Backtracking & Search","backtracking",[290,296,301],{"title":291,"path":292,"lessonNumber":6,"topics":293,"summary":295},"Backtracking: Subsets, Permutations & Combinations","\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals",[294],"Backtracking","Backtracking builds a solution one choice at a time and abandons a partial solution the moment it cannot be completed, exploring a state-space tree by depth-first search. We meet the universal choose\u002Fexplore\u002Fun-choose template, derive the canonical enumerations — subsets ($2^n$), permutations ($n!$), and combinations ($\\binom{n}{k}$) — handle duplicate elements by skipping equal siblings, and see how pruning turns an exponential search into a tractable one.",{"title":297,"path":298,"lessonNumber":18,"topics":299,"summary":300},"Constraint Search: N-Queens & Sudoku","\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search",[294],"Many hard puzzles are **constraint satisfaction problems**: assign each variable a value from its domain so that every constraint holds. Backtracking solves them by assigning variables one at a time and rejecting a partial assignment the instant a constraint breaks. We make the rejection cheap — $O(1)$ conflict checks for N-Queens via column and diagonal sets — and prune harder with **forward checking**, **MRV** ordering, and **constraint propagation**, which is what lets an exponential search actually finish.",{"title":302,"path":303,"lessonNumber":24,"topics":304,"summary":305},"Branch & Bound and Meet in the Middle","\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound",[294],"Plain backtracking prunes a search tree by _feasibility_; for _optimization_ problems we can prune far more aggressively by _value_. **Branch and bound** keeps the best complete solution found so far and discards any partial solution whose optimistic bound cannot beat it. **Meet in the middle** splits the instance in two, enumerates each half, and recombines by binary search — turning $2^n$ into $O(2^{n\u002F2}\\,n)$ and pushing exact search out to $n \\approx 40$.",{"module":307,"moduleNumber":283,"slug":308,"lessons":309},"Mathematical Algorithms","mathematical-algorithms",[310,316,321,326],{"title":311,"path":312,"lessonNumber":6,"topics":313,"summary":315},"Number Theory: GCD & Modular Arithmetic","\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics",[314],"Number Theory","This lesson opens the mathematical-algorithms module with the bedrock of computational number theory. We prove Euclid's recurrence $\\gcd(a,b)=\\gcd(b,\\,a\\bmod b)$ and its $O(\\log\\min(a,b))$ running time, extend it to recover Bézout coefficients $x,y$ with $ax+by=\\gcd(a,b)$, and build modular arithmetic on residue classes — including when a modular inverse $a^{-1}\\bmod m$ exists and how to compute it.",{"title":317,"path":318,"lessonNumber":18,"topics":319,"summary":320},"Modular Exponentiation & Primality","\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality",[314],"Computing $a^n \\bmod m$ naively costs $n$ multiplications; **repeated squaring** does it in $O(\\log n)$ by reading the bits of the exponent. We use this routine to state **Fermat's little theorem** (and the modular inverse it gives), then to test primality — trial division, the probabilistic **Fermat** and **Miller–Rabin** tests, and the deterministic witness set that settles primality for every 64-bit number.",{"title":322,"path":323,"lessonNumber":24,"topics":324,"summary":325},"Sieves & Factorization","\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization",[314],"The previous lesson tested one number for primality; here we ask for _all_ primes up to $n$ at once. The **sieve of Eratosthenes** cross-cuts composites in $O(n\\log\\log n)$, and a **linear sieve** does it in $O(n)$ while recording each number's **smallest prime factor**, which then factors any $x \\le n$ in $O(\\log x)$. From a factorization $x = \\prod p_i^{e_i}$ the multiplicative functions $\\tau$, $\\sigma$, and Euler's totient $\\varphi$ fall out immediately.",{"title":327,"path":328,"lessonNumber":73,"topics":329,"summary":330},"Combinatorics & Counting","\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics",[314],"Counting is the arithmetic of finite sets. We build up from permutations $n!$ and combinations $\\binom{n}{k}$, prove Pascal's rule by a bijection, and count multisets with stars and bars. The practical core is computing $\\binom{n}{k}\\bmod p$ in $O(1)$ from precomputed factorials and inverse factorials. We close with inclusion–exclusion and the Chinese Remainder Theorem, both of which lean on the modular inverse from the previous lesson.",{"module":332,"moduleNumber":333,"slug":334,"lessons":335},"Computational Geometry",11,"computational-geometry",[336,342,347],{"title":337,"path":338,"lessonNumber":6,"topics":339,"summary":341},"Geometric Primitives & Orientation","\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives",[340],"Geometry","Computational geometry is built on a single reliable primitive — the **orientation test**, a sign of a cross product that tells whether three points turn left, right, or lie collinear. From points-as-vectors and the dot and cross products we derive orientation, segment intersection, the shoelace area formula, and point-in-polygon tests, keeping all arithmetic **exact and integer** so that no floating-point rounding can corrupt a sign.",{"title":343,"path":344,"lessonNumber":18,"topics":345,"summary":346},"Convex Hull","\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull",[340],"The convex hull is the smallest convex polygon enclosing a point set — the rubber band snapped around the nails. We build it with Andrew's monotone chain, sorting by $(x,y)$ and sweeping a lower and upper hull while popping any non-left turn via the orientation primitive, in $O(n\\log n)$. A reduction from sorting shows that bound is optimal, and the hull unlocks diameter, smallest enclosing rectangle, and more through rotating calipers.",{"title":348,"path":349,"lessonNumber":24,"topics":350,"summary":351},"Sweep-Line Algorithms","\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line",[340],"The plane-sweep paradigm turns a static $2$-D geometry problem into a dynamic $1$-D ordered-set problem: a vertical line sweeps left to right, stopping at an $x$-sorted **event queue** while a balanced-BST **status structure** tracks the objects it currently crosses, ordered by $y$. We derive Bentley–Ottmann segment intersection in $O((n+k)\\log n)$, recover closest-pair in $O(n\\log n)$, and reduce skyline, rectangle-area, and overlap problems to $\\pm1$ event sweeps.",{"module":353,"moduleNumber":354,"slug":355,"lessons":356},"Intractability",12,"intractability",[357,363,367],{"title":358,"path":359,"lessonNumber":6,"topics":360,"summary":362},"P, NP, and Reductions","\u002Falgorithms\u002Fintractability\u002Fp-np-reductions",[361],"NP-Completeness","Most problems we have met so far have fast algorithms. A vast and important family seemingly does not. This lesson builds the vocabulary for that divide: decision problems, the class $\\mathsf{P}$ of problems we can solve quickly, the class $\\mathsf{NP}$ of problems whose solutions we can _check_ quickly, and polynomial-time reductions, the tool that lets us compare the difficulty of two problems without solving either.",{"title":361,"path":364,"lessonNumber":18,"topics":365,"summary":366},"\u002Falgorithms\u002Fintractability\u002Fnp-completeness",[361],"Some problems in $\\mathsf{NP}$ are universally hardest: every other problem in $\\mathsf{NP}$ reduces to them. This lesson defines $\\mathsf{NP}$-hard and $\\mathsf{NP}$-complete, states the Cook–Levin theorem that anchors the whole edifice on **SAT**, walks the web of reductions that grows from it, and gives the four-step recipe for proving a brand-new problem $\\mathsf{NP}$-complete.",{"title":368,"path":369,"lessonNumber":24,"topics":370,"summary":373},"Coping with NP-Hardness","\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness",[371,372],"Approximation","Heuristics","Proving a problem $\\mathsf{NP}$-hard is the beginning, not the end. The world still needs answers. This lesson surveys the four honest responses to hardness: approximation algorithms with a provable ratio (worked through a 2-approximation for vertex cover), heuristics and local search, exact exponential methods like branch and bound, and exploiting special structure in the instances you actually face.",{"id":375,"title":348,"blurb":376,"body":377,"description":5584,"extension":5585,"meta":5586,"module":332,"navigation":5588,"path":349,"practice":5589,"rawbody":5604,"readingTime":5605,"seo":5610,"sources":5611,"status":5618,"stem":5619,"summary":351,"topics":5620,"__hash__":5621},"course\u002F01.algorithms\u002F11.computational-geometry\u002F03.sweep-line.md","",{"type":378,"value":379,"toc":5576},"minimark",[380,629,678,683,686,790,820,925,936,940,1116,1139,1180,1183,1244,1247,1268,1435,1724,1958,2223,2274,2281,2285,2360,2464,2757,2902,3033,3268,3272,3316,3583,3648,3816,3985,4123,4323,4626,4759,4935,4939,5418,5572],[381,382,383,384,409,410,414,415,430,431,446,447,552,553,608,609,613,614,617,618],"p",{},"A great many geometric problems share an awkward shape: they ask a question about\n",[385,386,389],"span",{"className":387},[388],"katex",[385,390,394],{"className":391,"ariaHidden":393},[392],"katex-html","true",[385,395,398,403],{"className":396},[397],"base",[385,399],{"className":400,"style":402},[401],"strut","height:0.4306em;",[385,404,408],{"className":405},[406,407],"mord","mathnormal","n"," objects scattered in the plane whose answer seems to depend on ",[411,412,413],"em",{},"every pair"," of\nobjects at once. Do any two of these ",[385,416,418],{"className":417},[388],[385,419,421],{"className":420,"ariaHidden":393},[392],[385,422,424,427],{"className":423},[397],[385,425],{"className":426,"style":402},[401],[385,428,408],{"className":429},[406,407]," segments cross? What is the area covered\nby the union of these ",[385,432,434],{"className":433},[388],[385,435,437],{"className":436,"ariaHidden":393},[392],[385,438,440,443],{"className":439},[397],[385,441],{"className":442,"style":402},[401],[385,444,408],{"className":445},[406,407]," rectangles? The brute-force answer compares all\n",[385,448,450],{"className":449},[388],[385,451,453],{"className":452,"ariaHidden":393},[392],[385,454,456,460],{"className":455},[397],[385,457],{"className":458,"style":459},[401],"height:1.2em;vertical-align:-0.35em;",[385,461,463,475,544],{"className":462},[406],[385,464,469],{"className":465,"style":468},[466,467],"mopen","delimcenter","top:0em;",[385,470,474],{"className":471},[472,473],"delimsizing","size1","(",[385,476,479],{"className":477},[478],"mfrac",[385,480,484,535],{"className":481},[482,483],"vlist-t","vlist-t2",[385,485,488,530],{"className":486},[487],"vlist-r",[385,489,493,515],{"className":490,"style":492},[491],"vlist","height:0.7454em;",[385,494,496,501],{"style":495},"top:-2.355em;",[385,497],{"className":498,"style":500},[499],"pstrut","height:2.7em;",[385,502,508],{"className":503},[504,505,506,507],"sizing","reset-size6","size3","mtight",[385,509,511],{"className":510},[406,507],[385,512,514],{"className":513},[406,507],"2",[385,516,518,521],{"style":517},"top:-3.144em;",[385,519],{"className":520,"style":500},[499],[385,522,524],{"className":523},[504,505,506,507],[385,525,527],{"className":526},[406,507],[385,528,408],{"className":529},[406,407,507],[385,531,534],{"className":532},[533],"vlist-s","​",[385,536,538],{"className":537},[487],[385,539,542],{"className":540,"style":541},[491],"height:0.345em;",[385,543],{},[385,545,548],{"className":546,"style":468},[547,467],"mclose",[385,549,551],{"className":550},[472,473],")"," pairs and costs ",[385,554,556],{"className":555},[388],[385,557,559],{"className":558,"ariaHidden":393},[392],[385,560,562,566,570,573,605],{"className":561},[397],[385,563],{"className":564,"style":565},[401],"height:1.0641em;vertical-align:-0.25em;",[385,567,569],{"className":568},[406],"Θ",[385,571,474],{"className":572},[466],[385,574,576,579],{"className":575},[406],[385,577,408],{"className":578},[406,407],[385,580,583],{"className":581},[582],"msupsub",[385,584,586],{"className":585},[482],[385,587,589],{"className":588},[487],[385,590,593],{"className":591,"style":592},[491],"height:0.8141em;",[385,594,596,599],{"style":595},"top:-3.063em;margin-right:0.05em;",[385,597],{"className":598,"style":500},[499],[385,600,602],{"className":601},[504,505,506,507],[385,603,514],{"className":604},[406,507],[385,606,551],{"className":607},[547],". The ",[610,611,612],"strong",{},"plane-sweep"," paradigm\ndismantles that quadratic by refusing to look at the whole plane at once. Instead\nit imagines a vertical line sweeping steadily from left to right, and tracks only\nwhat is ",[411,615,616],{},"locally"," true at the line's current position.",[619,620,621],"sup",{},[622,623,628],"a",{"href":624,"ariaDescribedBy":625,"dataFootnoteRef":376,"id":627},"#user-content-fn-clrs-sweep",[626],"footnote-label","user-content-fnref-clrs-sweep","1",[381,630,631,632,648,649,652,653,674,675,677],{},"The payoff is a recurring reduction: a hard ",[385,633,635],{"className":634},[388],[385,636,638],{"className":637,"ariaHidden":393},[392],[385,639,641,645],{"className":640},[397],[385,642],{"className":643,"style":644},[401],"height:0.6444em;",[385,646,514],{"className":647},[406],"-D problem becomes a sequence of\ncheap updates to a ",[411,650,651],{},"one-dimensional ordered set",". At any instant, the only objects\nthat matter are the ones the sweep line currently crosses, and among those, only\nthe ones ",[411,654,655,656],{},"adjacent in ",[385,657,659],{"className":658},[388],[385,660,662],{"className":661,"ariaHidden":393},[392],[385,663,665,669],{"className":664},[397],[385,666],{"className":667,"style":668},[401],"height:0.625em;vertical-align:-0.1944em;",[385,670,673],{"className":671,"style":672},[406,407],"margin-right:0.0359em;","y"," can interact. We have already built every tool this\nneeds: balanced BSTs and ordered sets from the ",[622,676,97],{"href":101}," lesson,\nFenwick and segment trees from the structures that follow, and the sweep is the\nparadigm that puts them to geometric work.",[679,680,682],"h2",{"id":681},"the-plane-sweep-paradigm","The plane-sweep paradigm",[381,684,685],{},"Every sweep-line algorithm is assembled from two data structures and one loop.",[687,688,690,695],"callout",{"type":689},"remark",[381,691,692],{},[610,693,694],{},"Remark (The two structures).",[696,697,698,728],"ol",{},[699,700,701,702,705,706,722,723,727],"li",{},"An ",[610,703,704],{},"event queue",": the ",[385,707,709],{"className":708},[388],[385,710,712],{"className":711,"ariaHidden":393},[392],[385,713,715,718],{"className":714},[397],[385,716],{"className":717,"style":402},[401],[385,719,721],{"className":720},[406,407],"x","-coordinates at which ",[724,725,726],"q",{},"something happens","\n(object endpoints, and, for intersection problems, computed crossing points),\nheld in sorted order so we can pull the next event cheaply.",[699,729,730,731,734,735,738,739,754,755,773,774,789],{},"A ",[610,732,733],{},"status structure"," (the ",[411,736,737],{},"active set","): a balanced BST or ordered set\nholding exactly the objects the sweep line currently intersects, keyed by\ntheir ",[385,740,742],{"className":741},[388],[385,743,745],{"className":744,"ariaHidden":393},[392],[385,746,748,751],{"className":747},[397],[385,749],{"className":750,"style":668},[401],[385,752,673],{"className":753,"style":672},[406,407],"-coordinate ",[610,756,757,758],{},"at the sweep line's ",[385,759,761],{"className":760},[388],[385,762,764],{"className":763,"ariaHidden":393},[392],[385,765,767,770],{"className":766},[397],[385,768],{"className":769,"style":402},[401],[385,771,721],{"className":772},[406,407],". This ",[385,775,777],{"className":776},[388],[385,778,780],{"className":779,"ariaHidden":393},[392],[385,781,783,786],{"className":782},[397],[385,784],{"className":785,"style":668},[401],[385,787,673],{"className":788,"style":672},[406,407],"-order is the whole\npoint: vertical neighbors in the status are spatial neighbors in the plane.",[381,791,792,793,796,797,812,813],{},"The loop is then uniform. Pop the leftmost event; it marks a ",[411,794,795],{},"combinatorial\nchange",": an object enters the active set, an object leaves it, or two active\nobjects swap ",[385,798,800],{"className":799},[388],[385,801,803],{"className":802,"ariaHidden":393},[392],[385,804,806,809],{"className":805},[397],[385,807],{"className":808,"style":668},[401],[385,810,673],{"className":811,"style":672},[406,407],"-order. Update the status structure accordingly, inspect the few\nneighbors the change could affect, and emit any answers. Between events nothing\nin the active set changes order, so we never need to look there.",[619,814,815],{},[622,816,514],{"href":817,"ariaDescribedBy":818,"dataFootnoteRef":376,"id":819},"#user-content-fn-skiena-sweep",[626],"user-content-fnref-skiena-sweep",[687,821,822],{"type":689},[381,823,824,827,828,855,856,895,896,920,921,924],{},[610,825,826],{},"Remark (Why this is fast)."," There are ",[385,829,831],{"className":830},[388],[385,832,834],{"className":833,"ariaHidden":393},[392],[385,835,837,841,846,849,852],{"className":836},[397],[385,838],{"className":839,"style":840},[401],"height:1em;vertical-align:-0.25em;",[385,842,845],{"className":843,"style":844},[406,407],"margin-right:0.0278em;","O",[385,847,474],{"className":848},[466],[385,850,408],{"className":851},[406,407],[385,853,551],{"className":854},[547]," structural events (two per object), each\ncosting ",[385,857,859],{"className":858},[388],[385,860,862],{"className":861,"ariaHidden":393},[392],[385,863,865,868,871,874,884,889,892],{"className":864},[397],[385,866],{"className":867,"style":840},[401],[385,869,845],{"className":870,"style":844},[406,407],[385,872,474],{"className":873},[466],[385,875,878],{"className":876},[877],"mop",[385,879,883],{"className":880,"style":882},[406,881],"mathrm","margin-right:0.0139em;","log",[385,885],{"className":886,"style":888},[887],"mspace","margin-right:0.1667em;",[385,890,408],{"className":891},[406,407],[385,893,551],{"className":894},[547]," to process in a balanced status structure, and each event\ntouches only ",[385,897,899],{"className":898},[388],[385,900,902],{"className":901,"ariaHidden":393},[392],[385,903,905,908,911,914,917],{"className":904},[397],[385,906],{"className":907,"style":840},[401],[385,909,845],{"className":910,"style":844},[406,407],[385,912,474],{"className":913},[466],[385,915,628],{"className":916},[406],[385,918,551],{"className":919},[547]," ",[411,922,923],{},"neighbours",". The geometry, the expensive part, is paid\nonly at events, and only against adjacent objects, never against all pairs.",[381,926,927,928,931,932,935],{},"The art in any specific problem is choosing ",[411,929,930],{},"what counts as an event"," and ",[411,933,934],{},"what\nthe status orders by",". The rest is bookkeeping.",[679,937,939],{"id":938},"segment-intersection-bentleyottmann","Segment intersection: Bentley–Ottmann",[381,941,942,943,958,959,977,978,1028,1029,1044,1045,1109,1110],{},"Given ",[385,944,946],{"className":945},[388],[385,947,949],{"className":948,"ariaHidden":393},[392],[385,950,952,955],{"className":951},[397],[385,953],{"className":954,"style":402},[401],[385,956,408],{"className":957},[406,407]," line segments, report all ",[385,960,962],{"className":961},[388],[385,963,965],{"className":964,"ariaHidden":393},[392],[385,966,968,972],{"className":967},[397],[385,969],{"className":970,"style":971},[401],"height:0.6944em;",[385,973,976],{"className":974,"style":975},[406,407],"margin-right:0.0315em;","k"," pairs that cross. The naive test of every\npair is ",[385,979,981],{"className":980},[388],[385,982,984],{"className":983,"ariaHidden":393},[392],[385,985,987,990,993,996,1025],{"className":986},[397],[385,988],{"className":989,"style":565},[401],[385,991,569],{"className":992},[406],[385,994,474],{"className":995},[466],[385,997,999,1002],{"className":998},[406],[385,1000,408],{"className":1001},[406,407],[385,1003,1005],{"className":1004},[582],[385,1006,1008],{"className":1007},[482],[385,1009,1011],{"className":1010},[487],[385,1012,1014],{"className":1013,"style":592},[491],[385,1015,1016,1019],{"style":595},[385,1017],{"className":1018,"style":500},[499],[385,1020,1022],{"className":1021},[504,505,506,507],[385,1023,514],{"className":1024},[406,507],[385,1026,551],{"className":1027},[547],", wasteful when ",[385,1030,1032],{"className":1031},[388],[385,1033,1035],{"className":1034,"ariaHidden":393},[392],[385,1036,1038,1041],{"className":1037},[397],[385,1039],{"className":1040,"style":971},[401],[385,1042,976],{"className":1043,"style":975},[406,407]," is small. The Bentley–Ottmann sweep does\nit in ",[385,1046,1048],{"className":1047},[388],[385,1049,1051,1079],{"className":1050,"ariaHidden":393},[392],[385,1052,1054,1057,1060,1064,1067,1071,1076],{"className":1053},[397],[385,1055],{"className":1056,"style":840},[401],[385,1058,845],{"className":1059,"style":844},[406,407],[385,1061,1063],{"className":1062},[466],"((",[385,1065,408],{"className":1066},[406,407],[385,1068],{"className":1069,"style":1070},[887],"margin-right:0.2222em;",[385,1072,1075],{"className":1073},[1074],"mbin","+",[385,1077],{"className":1078,"style":1070},[887],[385,1080,1082,1085,1088,1091,1094,1100,1103,1106],{"className":1081},[397],[385,1083],{"className":1084,"style":840},[401],[385,1086,976],{"className":1087,"style":975},[406,407],[385,1089,551],{"className":1090},[547],[385,1092],{"className":1093,"style":888},[887],[385,1095,1097],{"className":1096},[877],[385,1098,883],{"className":1099,"style":882},[406,881],[385,1101],{"className":1102,"style":888},[887],[385,1104,408],{"className":1105},[406,407],[385,1107,551],{"className":1108},[547]," by exploiting a single geometric fact.",[619,1111,1112],{},[622,1113,628],{"href":624,"ariaDescribedBy":1114,"dataFootnoteRef":376,"id":1115},[626],"user-content-fnref-clrs-sweep-2",[381,1117,1118,1119,1134,1135,1138],{},"Sweep a vertical line left to right. The status structure holds the segments\ncurrently straddling the line, ordered by the ",[385,1120,1122],{"className":1121},[388],[385,1123,1125],{"className":1124,"ariaHidden":393},[392],[385,1126,1128,1131],{"className":1127},[397],[385,1129],{"className":1130,"style":668},[401],[385,1132,673],{"className":1133,"style":672},[406,407],"-coordinate at which each segment\nmeets the line. As the line advances this order is ",[411,1136,1137],{},"stable"," except at three kinds\nof event:",[1140,1141,1142,1164,1170],"ul",{},[699,1143,1144,1147,1148,1163],{},[610,1145,1146],{},"Left endpoint"," of a segment: insert it into the status at its ",[385,1149,1151],{"className":1150},[388],[385,1152,1154],{"className":1153,"ariaHidden":393},[392],[385,1155,1157,1160],{"className":1156},[397],[385,1158],{"className":1159,"style":668},[401],[385,1161,673],{"className":1162,"style":672},[406,407],"-position.",[699,1165,1166,1169],{},[610,1167,1168],{},"Right endpoint",": delete the segment from the status.",[699,1171,1172,1175,1176,1179],{},[610,1173,1174],{},"Intersection point"," of two segments: the two segments ",[610,1177,1178],{},"swap"," their relative\norder in the status (the one that was above is now below).",[381,1181,1182],{},"The engine is the following invariant, which collapses the problem from all pairs\nto a constant check per event.",[687,1184,1186],{"type":1185},"lemma",[381,1187,1188,1191,1192,1195,1196,1211,1212,1227,1228,1243],{},[610,1189,1190],{},"Invariant (Adjacency)."," Two segments can intersect only after they have become\n",[411,1193,1194],{},"adjacent"," in the ",[385,1197,1199],{"className":1198},[388],[385,1200,1202],{"className":1201,"ariaHidden":393},[392],[385,1203,1205,1208],{"className":1204},[397],[385,1206],{"className":1207,"style":668},[401],[385,1209,673],{"className":1210,"style":672},[406,407],"-ordered status. Just before the crossing ",[385,1213,1215],{"className":1214},[388],[385,1216,1218],{"className":1217,"ariaHidden":393},[392],[385,1219,1221,1224],{"className":1220},[397],[385,1222],{"className":1223,"style":402},[401],[385,1225,721],{"className":1226},[406,407],", the two\nsegments meet at the same ",[385,1229,1231],{"className":1230},[388],[385,1232,1234],{"className":1233,"ariaHidden":393},[392],[385,1235,1237,1240],{"className":1236},[397],[385,1238],{"className":1239,"style":668},[401],[385,1241,673],{"className":1242,"style":672},[406,407]," and so must be neighbors in the order.",[381,1245,1246],{},"So at each event we test only the handful of newly-adjacent pairs for a future\ncrossing, and any crossing we find is pushed into the event queue as a new event:",[1140,1248,1249,1256,1262],{},[699,1250,1251,1252,1255],{},"On ",[610,1253,1254],{},"insert",", the new segment acquires an upper and a lower neighbor; test\neach of those two pairs.",[699,1257,1251,1258,1261],{},[610,1259,1260],{},"delete",", the departing segment's old neighbors become adjacent; test\nthat one new pair.",[699,1263,1264,1265,1267],{},"On a ",[610,1266,1178],{},", the two swapping segments acquire new outer neighbors; test\nthose two new pairs.",[1269,1270,1274,1413],"figure",{"className":1271},[1272,1273],"tikz-figure","tikz-diagram-rendered",[1275,1276,1281],"svg",{"xmlns":1277,"width":1278,"height":1279,"viewBox":1280},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","367.146","212.943","-75 -75 275.360 159.707",[1282,1283,1286,1291,1294,1303,1306,1323,1337,1351,1365,1379,1384,1403,1407,1410],"g",{"stroke":1284,"style":1285},"currentColor","stroke-miterlimit:10;stroke-width:.4",[1287,1288],"path",{"fill":1289,"d":1290},"none","M-65.403 64.446H182.98",[1287,1292],{"stroke":1289,"d":1293},"m184.98 64.446-3.2-1.6 1.2 1.6-1.2 1.6",[1282,1295,1297],{"transform":1296},"translate(245.381 1.937)",[1287,1298],{"d":1299,"fill":1284,"stroke":1284,"className":1300,"style":1302},"M-56.138 64.156Q-55.962 64.283-55.689 64.283Q-55.399 64.283-55.186 64.029Q-54.973 63.774-54.894 63.457L-54.490 61.844Q-54.402 61.467-54.402 61.278Q-54.402 61.053-54.529 60.891Q-54.657 60.728-54.876 60.728Q-55.294 60.728-55.626 61.078Q-55.957 61.427-56.076 61.880Q-56.094 61.963-56.164 61.963L-56.274 61.963Q-56.362 61.963-56.362 61.844Q-56.230 61.304-55.808 60.886Q-55.386 60.469-54.859 60.469Q-54.525 60.469-54.250 60.640Q-53.975 60.812-53.861 61.106Q-53.703 60.834-53.457 60.651Q-53.211 60.469-52.925 60.469Q-52.587 60.469-52.314 60.636Q-52.042 60.803-52.042 61.124Q-52.042 61.352-52.185 61.521Q-52.327 61.691-52.565 61.691Q-52.705 61.691-52.811 61.598Q-52.916 61.506-52.916 61.361Q-52.916 61.176-52.793 61.034Q-52.670 60.891-52.486 60.856Q-52.666 60.728-52.943 60.728Q-53.233 60.728-53.444 60.985Q-53.655 61.242-53.734 61.559L-54.138 63.167Q-54.230 63.528-54.230 63.725Q-54.230 63.958-54.101 64.121Q-53.971 64.283-53.742 64.283Q-53.457 64.283-53.209 64.114Q-52.960 63.945-52.787 63.673Q-52.613 63.400-52.547 63.132Q-52.538 63.101-52.514 63.077Q-52.490 63.053-52.455 63.053L-52.349 63.053Q-52.310 63.053-52.284 63.090Q-52.257 63.128-52.257 63.167Q-52.345 63.514-52.565 63.833Q-52.784 64.152-53.101 64.349Q-53.417 64.547-53.760 64.547Q-54.098 64.547-54.373 64.378Q-54.648 64.209-54.771 63.905Q-54.920 64.174-55.169 64.360Q-55.417 64.547-55.698 64.547Q-56.041 64.547-56.315 64.380Q-56.590 64.213-56.590 63.888Q-56.590 63.664-56.441 63.492Q-56.291 63.321-56.058 63.321Q-55.913 63.321-55.810 63.413Q-55.707 63.506-55.707 63.655Q-55.707 63.831-55.830 63.978Q-55.953 64.125-56.138 64.156",[1301],"tikz-text","stroke-width:0.270",[1287,1304],{"fill":1289,"d":1305},"M-39.796 67.86v-6.828M2.883 67.86v-6.828M39.872 67.86v-6.828M102.468 67.86v-6.828M147.992 67.86v-6.828",[1282,1307,1308,1316],{"stroke":1289},[1282,1309,1311],{"transform":1310},"translate(13.017 12.548)",[1287,1312],{"d":1313,"fill":1284,"stroke":1284,"className":1314,"style":1315},"M-55.828 63.368Q-55.828 63.743-55.646 64.007Q-55.465 64.270-55.105 64.270Q-54.597 64.270-54.142 64.077Q-53.687 63.883-53.402 63.508Q-53.383 63.477-53.332 63.477Q-53.281 63.477-53.234 63.528Q-53.187 63.579-53.187 63.630Q-53.187 63.669-53.211 63.692Q-53.527 64.106-54.043 64.315Q-54.558 64.524-55.125 64.524Q-55.535 64.524-55.846 64.327Q-56.156 64.130-56.324 63.786Q-56.492 63.442-56.492 63.048Q-56.492 62.606-56.314 62.216Q-56.137 61.825-55.818 61.530Q-55.500 61.235-55.099 61.077Q-54.699 60.919-54.273 60.919Q-53.910 60.919-53.621 61.096Q-53.332 61.274-53.332 61.622Q-53.332 62.083-53.730 62.307Q-54.129 62.532-54.623 62.585Q-55.117 62.637-55.699 62.637L-55.722 62.637Q-55.828 63.106-55.828 63.368M-55.660 62.383Q-55.199 62.383-54.789 62.344Q-54.379 62.305-54.031 62.139Q-53.683 61.973-53.683 61.630Q-53.683 61.411-53.869 61.292Q-54.054 61.173-54.293 61.173Q-54.640 61.173-54.914 61.339Q-55.187 61.505-55.375 61.782Q-55.562 62.059-55.660 62.383",[1301],"stroke-width:0.240",[1282,1317,1318],{"transform":1310},[1287,1319],{"d":1320,"fill":1284,"stroke":1284,"className":1321,"style":1322},"M-49.883 65.557L-52.174 65.557L-52.174 65.299Q-51.298 65.299-51.298 65.126L-51.298 62.047Q-51.491 62.135-51.723 62.172Q-51.954 62.208-52.209 62.208L-52.209 61.951Q-51.831 61.951-51.510 61.866Q-51.190 61.781-50.961 61.567L-50.841 61.567Q-50.809 61.567-50.784 61.590Q-50.759 61.614-50.759 61.652L-50.759 65.126Q-50.759 65.299-49.883 65.299",[1301],"stroke-width:0.180",[1282,1324,1325,1331],{"stroke":1289},[1282,1326,1328],{"transform":1327},"translate(55.696 12.548)",[1287,1329],{"d":1313,"fill":1284,"stroke":1284,"className":1330,"style":1315},[1301],[1282,1332,1333],{"transform":1327},[1287,1334],{"d":1335,"fill":1284,"stroke":1284,"className":1336,"style":1322},"M-49.883 65.557L-52.493 65.557L-52.493 65.372Q-52.487 65.349-52.467 65.323L-51.316 64.268Q-50.976 63.957-50.796 63.771Q-50.615 63.585-50.470 63.325Q-50.325 63.064-50.325 62.768Q-50.325 62.495-50.451 62.280Q-50.577 62.065-50.797 61.945Q-51.017 61.825-51.292 61.825Q-51.468 61.825-51.638 61.882Q-51.808 61.939-51.940 62.046Q-52.071 62.153-52.151 62.311Q-52.063 62.311-51.985 62.355Q-51.907 62.399-51.863 62.475Q-51.820 62.551-51.820 62.648Q-51.820 62.788-51.916 62.885Q-52.013 62.982-52.156 62.982Q-52.294 62.982-52.394 62.882Q-52.493 62.783-52.493 62.648Q-52.493 62.323-52.303 62.075Q-52.112 61.828-51.809 61.697Q-51.506 61.567-51.190 61.567Q-50.809 61.567-50.466 61.702Q-50.123 61.836-49.909 62.109Q-49.695 62.381-49.695 62.768Q-49.695 63.043-49.820 63.270Q-49.945 63.497-50.125 63.669Q-50.305 63.840-50.630 64.080Q-50.955 64.321-51.040 64.388L-51.796 64.992L-51.263 64.992Q-50.774 64.992-50.443 64.984Q-50.111 64.977-50.097 64.962Q-50.038 64.892-50.006 64.757Q-49.974 64.622-49.942 64.411L-49.695 64.411",[1301],[1282,1338,1339,1345],{"stroke":1289},[1282,1340,1342],{"transform":1341},"translate(92.684 12.548)",[1287,1343],{"d":1313,"fill":1284,"stroke":1284,"className":1344,"style":1315},[1301],[1282,1346,1347],{"transform":1341},[1287,1348],{"d":1349,"fill":1284,"stroke":1284,"className":1350,"style":1322},"M-52.151 65.106Q-51.855 65.443-51.125 65.443Q-50.867 65.443-50.687 65.315Q-50.507 65.188-50.419 64.980Q-50.331 64.772-50.331 64.514Q-50.331 64.119-50.538 63.848Q-50.744 63.577-51.131 63.577L-51.597 63.577Q-51.661 63.562-51.676 63.500L-51.676 63.433Q-51.661 63.377-51.597 63.360L-51.195 63.336Q-50.985 63.336-50.816 63.194Q-50.648 63.052-50.555 62.838Q-50.463 62.624-50.463 62.408Q-50.463 62.120-50.648 61.955Q-50.832 61.789-51.125 61.789Q-51.386 61.789-51.610 61.857Q-51.834 61.924-51.981 62.082Q-51.852 62.100-51.773 62.189Q-51.694 62.279-51.694 62.408Q-51.694 62.545-51.789 62.640Q-51.884 62.736-52.025 62.736Q-52.159 62.736-52.256 62.639Q-52.353 62.542-52.353 62.408Q-52.353 62.120-52.162 61.929Q-51.972 61.737-51.691 61.652Q-51.409 61.567-51.125 61.567Q-50.850 61.567-50.549 61.658Q-50.249 61.748-50.041 61.937Q-49.833 62.126-49.833 62.408Q-49.833 62.777-50.079 63.049Q-50.325 63.322-50.697 63.451Q-50.278 63.544-49.961 63.827Q-49.643 64.110-49.643 64.508Q-49.643 64.871-49.862 65.137Q-50.082 65.402-50.428 65.542Q-50.774 65.683-51.125 65.683Q-51.348 65.683-51.595 65.635Q-51.843 65.586-52.063 65.476Q-52.282 65.367-52.414 65.188Q-52.546 65.009-52.546 64.754Q-52.546 64.605-52.444 64.502Q-52.341 64.400-52.192 64.400Q-52.042 64.400-51.940 64.502Q-51.837 64.605-51.837 64.754Q-51.837 64.886-51.926 64.987Q-52.016 65.088-52.151 65.106",[1301],[1282,1352,1353,1359],{"stroke":1289},[1282,1354,1356],{"transform":1355},"translate(155.28 12.548)",[1287,1357],{"d":1313,"fill":1284,"stroke":1284,"className":1358,"style":1315},[1301],[1282,1360,1361],{"transform":1355},[1287,1362],{"d":1363,"fill":1284,"stroke":1284,"className":1364,"style":1322},"M-50.794 64.578L-52.649 64.578L-52.649 64.321L-50.554 61.614Q-50.516 61.567-50.457 61.567L-50.325 61.567Q-50.284 61.567-50.257 61.595Q-50.229 61.622-50.229 61.663L-50.229 64.321L-49.540 64.321L-49.540 64.578L-50.229 64.578L-50.229 65.126Q-50.229 65.299-49.552 65.299L-49.552 65.557L-51.471 65.557L-51.471 65.299Q-50.794 65.299-50.794 65.126L-50.794 64.578M-50.753 62.238L-52.359 64.321L-50.753 64.321",[1301],[1282,1366,1367,1373],{"stroke":1289},[1282,1368,1370],{"transform":1369},"translate(200.805 12.548)",[1287,1371],{"d":1313,"fill":1284,"stroke":1284,"className":1372,"style":1315},[1301],[1282,1374,1375],{"transform":1369},[1287,1376],{"d":1377,"fill":1284,"stroke":1284,"className":1378,"style":1322},"M-52.168 64.915Q-52.092 65.082-51.944 65.201Q-51.796 65.320-51.607 65.381Q-51.418 65.443-51.231 65.443Q-50.914 65.443-50.711 65.301Q-50.507 65.159-50.413 64.912Q-50.320 64.666-50.320 64.356Q-50.320 63.902-50.467 63.581Q-50.615 63.260-51.017 63.260Q-51.266 63.260-51.434 63.322Q-51.603 63.383-51.708 63.468Q-51.814 63.553-51.890 63.637Q-51.966 63.720-52.001 63.726L-52.066 63.726Q-52.095 63.726-52.123 63.695Q-52.151 63.664-52.151 63.638L-52.151 61.640Q-52.142 61.567-52.066 61.567Q-52.060 61.567-52.036 61.573Q-51.547 61.760-51.064 61.760Q-50.574 61.760-50.085 61.573Q-50.062 61.567-50.056 61.567Q-49.991 61.567-49.971 61.640L-49.971 61.704Q-49.974 61.728-49.991 61.754Q-50.252 62.027-50.591 62.178Q-50.929 62.328-51.292 62.328Q-51.614 62.328-51.893 62.252L-51.893 63.336Q-51.720 63.187-51.494 63.115Q-51.269 63.043-51.017 63.043Q-50.656 63.043-50.353 63.221Q-50.050 63.398-49.873 63.698Q-49.695 63.998-49.695 64.356Q-49.695 64.740-49.918 65.046Q-50.141 65.352-50.495 65.517Q-50.850 65.683-51.231 65.683Q-51.541 65.683-51.836 65.548Q-52.130 65.413-52.312 65.164Q-52.493 64.915-52.493 64.590Q-52.493 64.455-52.403 64.365Q-52.312 64.274-52.174 64.274Q-52.039 64.274-51.944 64.365Q-51.849 64.455-51.849 64.590Q-51.849 64.728-51.940 64.822Q-52.030 64.915-52.168 64.915",[1301],[1287,1380],{"fill":1289,"stroke":1381,"d":1382,"style":1383},"var(--tk-accent)","M65.48 64.446V-57.901","stroke-width:1.2",[1282,1385,1386],{"fill":1381,"stroke":1381},[1282,1387,1390,1397],{"fill":1381,"stroke":1289,"fontFamily":1388,"fontSize":1389},"cmr8","8",[1282,1391,1393],{"transform":1392},"translate(111.58 -129.938)",[1287,1394],{"d":1395,"fill":1381,"stroke":1381,"className":1396,"style":1315},"M-56.586 64.438L-56.586 63.216Q-56.586 63.188-56.554 63.157Q-56.523 63.126-56.500 63.126L-56.394 63.126Q-56.324 63.126-56.308 63.188Q-56.246 63.508-56.107 63.749Q-55.969 63.989-55.736 64.130Q-55.504 64.270-55.195 64.270Q-54.957 64.270-54.748 64.210Q-54.539 64.149-54.402 64.001Q-54.265 63.852-54.265 63.606Q-54.265 63.352-54.476 63.186Q-54.687 63.020-54.957 62.966L-55.578 62.852Q-55.984 62.774-56.285 62.518Q-56.586 62.262-56.586 61.887Q-56.586 61.520-56.385 61.298Q-56.183 61.075-55.859 60.977Q-55.535 60.880-55.195 60.880Q-54.730 60.880-54.433 61.087L-54.211 60.903Q-54.187 60.880-54.156 60.880L-54.105 60.880Q-54.074 60.880-54.047 60.907Q-54.019 60.934-54.019 60.966L-54.019 61.950Q-54.019 61.981-54.045 62.010Q-54.070 62.040-54.105 62.040L-54.211 62.040Q-54.246 62.040-54.273 62.012Q-54.301 61.985-54.301 61.950Q-54.301 61.551-54.553 61.331Q-54.804 61.110-55.203 61.110Q-55.558 61.110-55.842 61.233Q-56.125 61.356-56.125 61.661Q-56.125 61.880-55.924 62.012Q-55.722 62.145-55.476 62.188L-54.851 62.301Q-54.422 62.391-54.113 62.688Q-53.804 62.985-53.804 63.399Q-53.804 63.969-54.203 64.247Q-54.601 64.524-55.195 64.524Q-55.746 64.524-56.097 64.188L-56.394 64.501Q-56.418 64.524-56.453 64.524L-56.500 64.524Q-56.523 64.524-56.554 64.493Q-56.586 64.462-56.586 64.438M-51.691 64.415L-52.762 61.559Q-52.828 61.380-52.959 61.337Q-53.090 61.294-53.347 61.294L-53.347 60.997L-51.668 60.997L-51.668 61.294Q-52.117 61.294-52.117 61.493Q-52.113 61.508-52.111 61.526Q-52.109 61.544-52.109 61.559L-51.316 63.653L-50.605 61.743Q-50.640 61.649-50.640 61.604Q-50.640 61.559-50.676 61.559Q-50.742 61.380-50.873 61.337Q-51.004 61.294-51.258 61.294L-51.258 60.997L-49.668 60.997L-49.668 61.294Q-50.117 61.294-50.117 61.493Q-50.113 61.512-50.111 61.530Q-50.109 61.548-50.109 61.559L-49.277 63.774L-48.523 61.774Q-48.500 61.716-48.500 61.645Q-48.500 61.485-48.637 61.389Q-48.773 61.294-48.941 61.294L-48.941 60.997L-47.554 60.997L-47.554 61.294Q-47.789 61.294-47.967 61.421Q-48.144 61.548-48.226 61.774L-49.211 64.415Q-49.265 64.524-49.379 64.524L-49.437 64.524Q-49.551 64.524-49.594 64.415L-50.453 62.141L-51.308 64.415Q-51.347 64.524-51.469 64.524L-51.523 64.524Q-51.637 64.524-51.691 64.415",[1301],[1282,1398,1399],{"transform":1392},[1287,1400],{"d":1401,"fill":1381,"stroke":1381,"className":1402,"style":1315},"M-47.374 62.692Q-47.374 62.212-47.141 61.796Q-46.909 61.380-46.499 61.130Q-46.089 60.880-45.612 60.880Q-44.882 60.880-44.483 61.321Q-44.085 61.762-44.085 62.493Q-44.085 62.598-44.178 62.622L-46.628 62.622L-46.628 62.692Q-46.628 63.102-46.507 63.458Q-46.385 63.813-46.114 64.030Q-45.842 64.247-45.413 64.247Q-45.050 64.247-44.753 64.018Q-44.456 63.790-44.354 63.438Q-44.346 63.391-44.260 63.376L-44.178 63.376Q-44.085 63.403-44.085 63.485Q-44.085 63.493-44.092 63.524Q-44.155 63.751-44.294 63.934Q-44.432 64.118-44.624 64.251Q-44.815 64.383-45.034 64.454Q-45.253 64.524-45.491 64.524Q-45.862 64.524-46.200 64.387Q-46.538 64.251-46.805 63.999Q-47.073 63.747-47.223 63.407Q-47.374 63.067-47.374 62.692M-46.620 62.383L-44.659 62.383Q-44.659 62.079-44.760 61.788Q-44.862 61.497-45.079 61.315Q-45.296 61.133-45.612 61.133Q-45.913 61.133-46.143 61.321Q-46.374 61.508-46.497 61.800Q-46.620 62.091-46.620 62.383M-43.596 62.692Q-43.596 62.212-43.364 61.796Q-43.132 61.380-42.721 61.130Q-42.311 60.880-41.835 60.880Q-41.104 60.880-40.706 61.321Q-40.307 61.762-40.307 62.493Q-40.307 62.598-40.401 62.622L-42.850 62.622L-42.850 62.692Q-42.850 63.102-42.729 63.458Q-42.608 63.813-42.337 64.030Q-42.065 64.247-41.635 64.247Q-41.272 64.247-40.975 64.018Q-40.678 63.790-40.577 63.438Q-40.569 63.391-40.483 63.376L-40.401 63.376Q-40.307 63.403-40.307 63.485Q-40.307 63.493-40.315 63.524Q-40.378 63.751-40.516 63.934Q-40.655 64.118-40.846 64.251Q-41.038 64.383-41.257 64.454Q-41.475 64.524-41.714 64.524Q-42.085 64.524-42.423 64.387Q-42.760 64.251-43.028 63.999Q-43.296 63.747-43.446 63.407Q-43.596 63.067-43.596 62.692M-42.842 62.383L-40.882 62.383Q-40.882 62.079-40.983 61.788Q-41.085 61.497-41.301 61.315Q-41.518 61.133-41.835 61.133Q-42.135 61.133-42.366 61.321Q-42.596 61.508-42.719 61.800Q-42.842 62.091-42.842 62.383M-37.936 65.997L-39.792 65.997L-39.792 65.704Q-39.522 65.704-39.354 65.659Q-39.186 65.614-39.186 65.438L-39.186 61.614Q-39.186 61.407-39.342 61.354Q-39.499 61.301-39.792 61.301L-39.792 61.005L-38.569 60.919L-38.569 61.383Q-38.339 61.161-38.024 61.040Q-37.710 60.919-37.370 60.919Q-36.897 60.919-36.493 61.165Q-36.089 61.411-35.856 61.827Q-35.624 62.243-35.624 62.719Q-35.624 63.094-35.772 63.423Q-35.921 63.751-36.190 64.003Q-36.460 64.255-36.803 64.389Q-37.147 64.524-37.507 64.524Q-37.796 64.524-38.067 64.403Q-38.339 64.282-38.546 64.071L-38.546 65.438Q-38.546 65.614-38.378 65.659Q-38.210 65.704-37.936 65.704L-37.936 65.997M-38.546 61.782L-38.546 63.622Q-38.393 63.911-38.132 64.091Q-37.870 64.270-37.561 64.270Q-37.276 64.270-37.053 64.132Q-36.831 63.993-36.678 63.762Q-36.526 63.532-36.448 63.260Q-36.370 62.989-36.370 62.719Q-36.370 62.387-36.495 62.030Q-36.620 61.673-36.868 61.436Q-37.116 61.200-37.464 61.200Q-37.788 61.200-38.083 61.356Q-38.378 61.512-38.546 61.782",[1301],[1287,1404],{"fill":1289,"stroke":1381,"d":1405,"style":1406},"M2.883 35.993 147.993-.996M39.872-37.984l85.358 62.596M-39.796 7.54l142.264-39.833","stroke-width:.8",[1287,1408],{"fill":1289,"d":1409},"m102.468 50.22 73.977-71.132M-39.796-43.675 17.11-52.21",[1287,1411],{"stroke":1289,"d":1412},"M66.78 12.377a1.3 1.3 0 1 0-2.6 0 1.3 1.3 0 0 0 2.6 0M66.78-9.532a1.3 1.3 0 1 0-2.6 0 1.3 1.3 0 0 0 2.6 0M66.78-23.758a1.3 1.3 0 1 0-2.6 0 1.3 1.3 0 0 0 2.6 0m-1.3 0",[1414,1415,1418,1419,1434],"figcaption",{"className":1416},[1417],"tikz-cap","Maintain the ",[385,1420,1422],{"className":1421},[388],[385,1423,1425],{"className":1424,"ariaHidden":393},[392],[385,1426,1428,1431],{"className":1427},[397],[385,1429],{"className":1430,"style":668},[401],[385,1432,673],{"className":1433,"style":672},[406,407],"-ordered active set; at each event check only neighbors",[381,1436,1437,1438,1453,1454,1469,1470,1485,1486,1519,1520,1580,1581,1631,1632,1723],{},"The accented segments are exactly the active set; the sweep line meets them at\nthree ",[385,1439,1441],{"className":1440},[388],[385,1442,1444],{"className":1443,"ariaHidden":393},[392],[385,1445,1447,1450],{"className":1446},[397],[385,1448],{"className":1449,"style":668},[401],[385,1451,673],{"className":1452,"style":672},[406,407],"-values, and the status stores them in that vertical order. Because the\ntotal number of events is ",[385,1455,1457],{"className":1456},[388],[385,1458,1460],{"className":1459,"ariaHidden":393},[392],[385,1461,1463,1466],{"className":1462},[397],[385,1464],{"className":1465,"style":402},[401],[385,1467,408],{"className":1468},[406,407]," endpoints plus ",[385,1471,1473],{"className":1472},[388],[385,1474,1476],{"className":1475,"ariaHidden":393},[392],[385,1477,1479,1482],{"className":1478},[397],[385,1480],{"className":1481,"style":971},[401],[385,1483,976],{"className":1484,"style":975},[406,407]," intersections, and each costs\n",[385,1487,1489],{"className":1488},[388],[385,1490,1492],{"className":1491,"ariaHidden":393},[392],[385,1493,1495,1498,1501,1504,1510,1513,1516],{"className":1494},[397],[385,1496],{"className":1497,"style":840},[401],[385,1499,845],{"className":1500,"style":844},[406,407],[385,1502,474],{"className":1503},[466],[385,1505,1507],{"className":1506},[877],[385,1508,883],{"className":1509,"style":882},[406,881],[385,1511],{"className":1512,"style":888},[887],[385,1514,408],{"className":1515},[406,407],[385,1517,551],{"className":1518},[547]," for the ordered-set operations, the total is ",[385,1521,1523],{"className":1522},[388],[385,1524,1526,1550],{"className":1525,"ariaHidden":393},[392],[385,1527,1529,1532,1535,1538,1541,1544,1547],{"className":1528},[397],[385,1530],{"className":1531,"style":840},[401],[385,1533,845],{"className":1534,"style":844},[406,407],[385,1536,1063],{"className":1537},[466],[385,1539,408],{"className":1540},[406,407],[385,1542],{"className":1543,"style":1070},[887],[385,1545,1075],{"className":1546},[1074],[385,1548],{"className":1549,"style":1070},[887],[385,1551,1553,1556,1559,1562,1565,1571,1574,1577],{"className":1552},[397],[385,1554],{"className":1555,"style":840},[401],[385,1557,976],{"className":1558,"style":975},[406,407],[385,1560,551],{"className":1561},[547],[385,1563],{"className":1564,"style":888},[887],[385,1566,1568],{"className":1567},[877],[385,1569,883],{"className":1570,"style":882},[406,881],[385,1572],{"className":1573,"style":888},[887],[385,1575,408],{"className":1576},[406,407],[385,1578,551],{"className":1579},[547]," — a\ndecisive win over ",[385,1582,1584],{"className":1583},[388],[385,1585,1587],{"className":1586,"ariaHidden":393},[392],[385,1588,1590,1593,1596,1599,1628],{"className":1589},[397],[385,1591],{"className":1592,"style":565},[401],[385,1594,569],{"className":1595},[406],[385,1597,474],{"className":1598},[466],[385,1600,1602,1605],{"className":1601},[406],[385,1603,408],{"className":1604},[406,407],[385,1606,1608],{"className":1607},[582],[385,1609,1611],{"className":1610},[482],[385,1612,1614],{"className":1613},[487],[385,1615,1617],{"className":1616,"style":592},[491],[385,1618,1619,1622],{"style":595},[385,1620],{"className":1621,"style":500},[499],[385,1623,1625],{"className":1624},[504,505,506,507],[385,1626,514],{"className":1627},[406,507],[385,1629,551],{"className":1630},[547]," whenever ",[385,1633,1635],{"className":1634},[388],[385,1636,1638,1659],{"className":1637,"ariaHidden":393},[392],[385,1639,1641,1644,1647,1651,1656],{"className":1640},[397],[385,1642],{"className":1643,"style":971},[401],[385,1645,976],{"className":1646,"style":975},[406,407],[385,1648],{"className":1649,"style":1650},[887],"margin-right:0.2778em;",[385,1652,1655],{"className":1653},[1654],"mrel","=",[385,1657],{"className":1658,"style":1650},[887],[385,1660,1662,1665,1669,1672,1701,1705,1708,1714,1717,1720],{"className":1661},[397],[385,1663],{"className":1664,"style":565},[401],[385,1666,1668],{"className":1667},[406,407],"o",[385,1670,474],{"className":1671},[466],[385,1673,1675,1678],{"className":1674},[406],[385,1676,408],{"className":1677},[406,407],[385,1679,1681],{"className":1680},[582],[385,1682,1684],{"className":1683},[482],[385,1685,1687],{"className":1686},[487],[385,1688,1690],{"className":1689,"style":592},[491],[385,1691,1692,1695],{"style":595},[385,1693],{"className":1694,"style":500},[499],[385,1696,1698],{"className":1697},[504,505,506,507],[385,1699,514],{"className":1700},[406,507],[385,1702,1704],{"className":1703},[406],"\u002F",[385,1706],{"className":1707,"style":888},[887],[385,1709,1711],{"className":1710},[877],[385,1712,883],{"className":1713,"style":882},[406,881],[385,1715],{"className":1716,"style":888},[887],[385,1718,408],{"className":1719},[406,407],[385,1721,551],{"className":1722},[547],".",[381,1725,1726,1727,931,1743,1760,1761,1776,1777,1792,1793,1809,1810,1825,1826,1841,1842,1857,1858,1873,1874,1877,1878,1894,1895,1910,1911,1926,1927,1910,1942,1957],{},"The swap event is the subtle one. Two segments ",[385,1728,1730],{"className":1729},[388],[385,1731,1733],{"className":1732,"ariaHidden":393},[392],[385,1734,1736,1739],{"className":1735},[397],[385,1737],{"className":1738,"style":402},[401],[385,1740,1742],{"className":1741},[406,407],"s",[385,1744,1746],{"className":1745},[388],[385,1747,1749],{"className":1748,"ariaHidden":393},[392],[385,1750,1752,1756],{"className":1751},[397],[385,1753],{"className":1754,"style":1755},[401],"height:0.6151em;",[385,1757,1759],{"className":1758},[406,407],"t"," are adjacent in the\nstatus, ",[385,1762,1764],{"className":1763},[388],[385,1765,1767],{"className":1766,"ariaHidden":393},[392],[385,1768,1770,1773],{"className":1769},[397],[385,1771],{"className":1772,"style":402},[401],[385,1774,1742],{"className":1775},[406,407]," above ",[385,1778,1780],{"className":1779},[388],[385,1781,1783],{"className":1782,"ariaHidden":393},[392],[385,1784,1786,1789],{"className":1785},[397],[385,1787],{"className":1788,"style":1755},[401],[385,1790,1759],{"className":1791},[406,407],", until the sweep reaches their crossing ",[385,1794,1796],{"className":1795},[388],[385,1797,1799],{"className":1798,"ariaHidden":393},[392],[385,1800,1802,1805],{"className":1801},[397],[385,1803],{"className":1804,"style":402},[401],[385,1806,1808],{"className":1807},[406,407],"c","; at that ",[385,1811,1813],{"className":1812},[388],[385,1814,1816],{"className":1815,"ariaHidden":393},[392],[385,1817,1819,1822],{"className":1818},[397],[385,1820],{"className":1821,"style":402},[401],[385,1823,721],{"className":1824},[406,407]," they\nmeet at equal ",[385,1827,1829],{"className":1828},[388],[385,1830,1832],{"className":1831,"ariaHidden":393},[392],[385,1833,1835,1838],{"className":1834},[397],[385,1836],{"className":1837,"style":668},[401],[385,1839,673],{"className":1840,"style":672},[406,407],", and just past it their order in the status flips — ",[385,1843,1845],{"className":1844},[388],[385,1846,1848],{"className":1847,"ariaHidden":393},[392],[385,1849,1851,1854],{"className":1850},[397],[385,1852],{"className":1853,"style":1755},[401],[385,1855,1759],{"className":1856},[406,407]," is now\nabove ",[385,1859,1861],{"className":1860},[388],[385,1862,1864],{"className":1863,"ariaHidden":393},[392],[385,1865,1867,1870],{"className":1866},[397],[385,1868],{"className":1869,"style":402},[401],[385,1871,1742],{"className":1872},[406,407],". The swap exposes two ",[411,1875,1876],{},"new"," adjacencies (the segment ",[385,1879,1881],{"className":1880},[388],[385,1882,1884],{"className":1883,"ariaHidden":393},[392],[385,1885,1887,1890],{"className":1886},[397],[385,1888],{"className":1889,"style":402},[401],[385,1891,1893],{"className":1892},[406,407],"u"," formerly outside\n",[385,1896,1898],{"className":1897},[388],[385,1899,1901],{"className":1900,"ariaHidden":393},[392],[385,1902,1904,1907],{"className":1903},[397],[385,1905],{"className":1906,"style":402},[401],[385,1908,1742],{"className":1909},[406,407]," now neighbors ",[385,1912,1914],{"className":1913},[388],[385,1915,1917],{"className":1916,"ariaHidden":393},[392],[385,1918,1920,1923],{"className":1919},[397],[385,1921],{"className":1922,"style":1755},[401],[385,1924,1759],{"className":1925},[406,407],", and the segment below ",[385,1928,1930],{"className":1929},[388],[385,1931,1933],{"className":1932,"ariaHidden":393},[392],[385,1934,1936,1939],{"className":1935},[397],[385,1937],{"className":1938,"style":1755},[401],[385,1940,1759],{"className":1941},[406,407],[385,1943,1945],{"className":1944},[388],[385,1946,1948],{"className":1947,"ariaHidden":393},[392],[385,1949,1951,1954],{"className":1950},[397],[385,1952],{"className":1953,"style":402},[401],[385,1955,1742],{"className":1956},[406,407],"), and those are\nthe only pairs worth testing next.",[1269,1959,1961,2203],{"className":1960},[1272,1273],[1275,1962,1966],{"xmlns":1277,"width":1963,"height":1964,"viewBox":1965},"352.076","174.226","-75 -75 264.057 130.669",[1282,1967,1968,1989,2004,2016,2028,2032,2049,2053,2062,2070,2085,2098,2109,2120],{"stroke":1284,"style":1285},[1282,1969,1970,1977,1983],{"stroke":1289,"fontSize":1389},[1282,1971,1973],{"transform":1972},"translate(28.085 -96.807)",[1287,1974],{"d":1975,"fill":1284,"stroke":1284,"className":1976,"style":1315},"M-69.742 33.425L-70.023 33.425L-70.023 28.706Q-70.023 28.491-70.085 28.396Q-70.148 28.300-70.265 28.279Q-70.382 28.257-70.628 28.257L-70.628 27.960L-69.406 27.874L-69.406 30.362Q-68.929 29.898-68.230 29.898Q-67.749 29.898-67.341 30.142Q-66.933 30.386-66.697 30.800Q-66.460 31.214-66.460 31.698Q-66.460 32.073-66.609 32.402Q-66.757 32.730-67.027 32.982Q-67.296 33.234-67.640 33.368Q-67.984 33.503-68.343 33.503Q-68.664 33.503-68.962 33.355Q-69.261 33.206-69.468 32.945L-69.742 33.425M-69.382 30.753L-69.382 32.593Q-69.230 32.890-68.970 33.070Q-68.710 33.249-68.398 33.249Q-67.972 33.249-67.705 33.030Q-67.437 32.812-67.322 32.466Q-67.207 32.120-67.207 31.698Q-67.207 31.050-67.455 30.601Q-67.703 30.152-68.300 30.152Q-68.636 30.152-68.925 30.310Q-69.214 30.468-69.382 30.753",[1301],[1282,1978,1979],{"transform":1972},[1287,1980],{"d":1981,"fill":1284,"stroke":1284,"className":1982,"style":1315},"M-65.697 31.671Q-65.697 31.191-65.464 30.775Q-65.232 30.359-64.822 30.109Q-64.412 29.859-63.935 29.859Q-63.205 29.859-62.806 30.300Q-62.408 30.741-62.408 31.472Q-62.408 31.577-62.501 31.601L-64.951 31.601L-64.951 31.671Q-64.951 32.081-64.830 32.437Q-64.708 32.792-64.437 33.009Q-64.165 33.226-63.736 33.226Q-63.373 33.226-63.076 32.997Q-62.779 32.769-62.677 32.417Q-62.669 32.370-62.583 32.355L-62.501 32.355Q-62.408 32.382-62.408 32.464Q-62.408 32.472-62.415 32.503Q-62.478 32.730-62.617 32.913Q-62.755 33.097-62.947 33.230Q-63.138 33.362-63.357 33.433Q-63.576 33.503-63.814 33.503Q-64.185 33.503-64.523 33.366Q-64.861 33.230-65.128 32.978Q-65.396 32.726-65.546 32.386Q-65.697 32.046-65.697 31.671M-64.943 31.362L-62.982 31.362Q-62.982 31.058-63.083 30.767Q-63.185 30.476-63.402 30.294Q-63.619 30.112-63.935 30.112Q-64.236 30.112-64.466 30.300Q-64.697 30.487-64.820 30.779Q-64.943 31.070-64.943 31.362M-59.853 33.425L-61.837 33.425L-61.837 33.128Q-61.564 33.128-61.396 33.081Q-61.228 33.034-61.228 32.866L-61.228 30.273L-61.869 30.273L-61.869 29.976L-61.228 29.976L-61.228 29.042Q-61.228 28.777-61.111 28.540Q-60.994 28.304-60.800 28.140Q-60.607 27.976-60.359 27.884Q-60.111 27.792-59.845 27.792Q-59.560 27.792-59.335 27.950Q-59.111 28.109-59.111 28.386Q-59.111 28.542-59.216 28.652Q-59.322 28.761-59.486 28.761Q-59.642 28.761-59.751 28.652Q-59.861 28.542-59.861 28.386Q-59.861 28.179-59.701 28.073Q-59.798 28.050-59.892 28.050Q-60.123 28.050-60.294 28.206Q-60.466 28.362-60.552 28.599Q-60.638 28.835-60.638 29.058L-60.638 29.976L-59.669 29.976L-59.669 30.273L-60.615 30.273L-60.615 32.866Q-60.615 33.034-60.388 33.081Q-60.162 33.128-59.853 33.128L-59.853 33.425M-59.326 31.730Q-59.326 31.226-59.070 30.794Q-58.814 30.362-58.378 30.111Q-57.943 29.859-57.443 29.859Q-57.056 29.859-56.714 30.003Q-56.373 30.148-56.111 30.409Q-55.849 30.671-55.706 31.007Q-55.564 31.343-55.564 31.730Q-55.564 32.222-55.828 32.632Q-56.091 33.042-56.521 33.273Q-56.951 33.503-57.443 33.503Q-57.935 33.503-58.369 33.271Q-58.802 33.038-59.064 32.630Q-59.326 32.222-59.326 31.730M-57.443 33.226Q-56.986 33.226-56.734 33.003Q-56.482 32.780-56.394 32.429Q-56.306 32.077-56.306 31.632Q-56.306 31.202-56.400 30.864Q-56.494 30.527-56.748 30.320Q-57.001 30.112-57.443 30.112Q-58.091 30.112-58.335 30.529Q-58.580 30.945-58.580 31.632Q-58.580 32.077-58.492 32.429Q-58.404 32.780-58.152 33.003Q-57.900 33.226-57.443 33.226M-53.072 33.425L-55.052 33.425L-55.052 33.128Q-54.783 33.128-54.615 33.083Q-54.447 33.038-54.447 32.866L-54.447 30.730Q-54.447 30.515-54.509 30.419Q-54.572 30.323-54.689 30.302Q-54.806 30.280-55.052 30.280L-55.052 29.984L-53.884 29.898L-53.884 30.683Q-53.806 30.472-53.654 30.286Q-53.501 30.101-53.302 29.999Q-53.103 29.898-52.876 29.898Q-52.630 29.898-52.439 30.042Q-52.248 30.187-52.248 30.417Q-52.248 30.573-52.353 30.683Q-52.458 30.792-52.615 30.792Q-52.771 30.792-52.880 30.683Q-52.990 30.573-52.990 30.417Q-52.990 30.257-52.884 30.152Q-53.208 30.152-53.423 30.380Q-53.638 30.609-53.734 30.948Q-53.830 31.288-53.830 31.593L-53.830 32.866Q-53.830 33.034-53.603 33.081Q-53.376 33.128-53.072 33.128L-53.072 33.425M-51.767 31.671Q-51.767 31.191-51.535 30.775Q-51.302 30.359-50.892 30.109Q-50.482 29.859-50.005 29.859Q-49.275 29.859-48.876 30.300Q-48.478 30.741-48.478 31.472Q-48.478 31.577-48.572 31.601L-51.021 31.601L-51.021 31.671Q-51.021 32.081-50.900 32.437Q-50.779 32.792-50.507 33.009Q-50.236 33.226-49.806 33.226Q-49.443 33.226-49.146 32.997Q-48.849 32.769-48.748 32.417Q-48.740 32.370-48.654 32.355L-48.572 32.355Q-48.478 32.382-48.478 32.464Q-48.478 32.472-48.486 32.503Q-48.548 32.730-48.687 32.913Q-48.826 33.097-49.017 33.230Q-49.208 33.362-49.427 33.433Q-49.646 33.503-49.884 33.503Q-50.255 33.503-50.593 33.366Q-50.931 33.230-51.199 32.978Q-51.466 32.726-51.617 32.386Q-51.767 32.046-51.767 31.671M-51.013 31.362L-49.052 31.362Q-49.052 31.058-49.154 30.767Q-49.255 30.476-49.472 30.294Q-49.689 30.112-50.005 30.112Q-50.306 30.112-50.537 30.300Q-50.767 30.487-50.890 30.779Q-51.013 31.070-51.013 31.362",[1301],[1282,1984,1985],{"transform":1972},[1287,1986],{"d":1987,"fill":1284,"stroke":1284,"className":1988,"style":1315},"M-44.379 32.409Q-44.379 32.648-44.291 32.837Q-44.203 33.027-44.032 33.138Q-43.860 33.249-43.625 33.249Q-43.117 33.249-42.662 33.056Q-42.207 32.862-41.922 32.487Q-41.903 32.456-41.852 32.456Q-41.801 32.456-41.754 32.507Q-41.707 32.558-41.707 32.609Q-41.707 32.648-41.731 32.671Q-42.047 33.085-42.563 33.294Q-43.078 33.503-43.645 33.503Q-43.946 33.503-44.201 33.402Q-44.457 33.300-44.649 33.112Q-44.840 32.925-44.946 32.667Q-45.051 32.409-45.051 32.120Q-45.051 31.698-44.862 31.296Q-44.672 30.894-44.346 30.577Q-44.020 30.261-43.617 30.079Q-43.215 29.898-42.793 29.898Q-42.410 29.898-42.098 30.064Q-41.785 30.230-41.785 30.585Q-41.785 30.800-41.916 30.960Q-42.047 31.120-42.258 31.120Q-42.391 31.120-42.485 31.034Q-42.578 30.948-42.578 30.816Q-42.578 30.644-42.457 30.511Q-42.336 30.378-42.172 30.355Q-42.375 30.152-42.813 30.152Q-43.180 30.152-43.477 30.370Q-43.774 30.589-43.975 30.941Q-44.176 31.292-44.278 31.691Q-44.379 32.089-44.379 32.409",[1301],[1282,1990,1992,1995],{"fill":1991,"stroke":1991,"style":1406},"var(--tk-line)",[1287,1993],{"fill":1289,"d":1994},"M-65.203-51.933h85.358",[1282,1996,1997],{"fill":1284,"stroke":1284},[1282,1998,2000],{"transform":1999},"translate(94.782 -83.636)",[1287,2001],{"d":2002,"fill":1284,"stroke":1284,"className":2003,"style":1315},"M-69.964 32.503Q-69.964 32.253-69.890 31.966Q-69.816 31.679-69.679 31.327Q-69.542 30.976-69.480 30.808Q-69.390 30.585-69.390 30.402Q-69.390 30.152-69.558 30.152Q-69.874 30.152-70.083 30.458Q-70.292 30.765-70.398 31.152Q-70.410 31.226-70.480 31.226L-70.582 31.226Q-70.617 31.226-70.644 31.191Q-70.671 31.155-70.671 31.128L-70.671 31.097Q-70.546 30.636-70.249 30.267Q-69.953 29.898-69.542 29.898Q-69.347 29.898-69.173 29.982Q-68.999 30.066-68.898 30.218Q-68.796 30.370-68.796 30.577Q-68.796 30.730-68.855 30.866Q-68.945 31.097-69.046 31.362Q-69.148 31.628-69.205 31.810Q-69.261 31.991-69.306 32.206Q-69.351 32.421-69.351 32.616Q-69.351 32.890-69.228 33.070Q-69.105 33.249-68.847 33.249Q-68.578 33.249-68.269 33.021Q-67.960 32.792-67.910 32.538L-67.343 30.265Q-67.304 30.140-67.201 30.058Q-67.097 29.976-66.972 29.976Q-66.863 29.976-66.783 30.050Q-66.703 30.124-66.703 30.234Q-66.703 30.257-66.718 30.320L-67.285 32.593Q-67.289 32.632-67.302 32.693Q-67.316 32.753-67.322 32.804Q-67.328 32.855-67.328 32.890Q-67.328 33.249-67.078 33.249Q-66.937 33.249-66.835 33.142Q-66.734 33.034-66.669 32.880Q-66.605 32.726-66.556 32.536Q-66.507 32.347-66.488 32.249Q-66.453 32.179-66.398 32.179L-66.292 32.179Q-66.253 32.179-66.230 32.208Q-66.207 32.237-66.207 32.273Q-66.207 32.288-66.214 32.304Q-66.285 32.601-66.382 32.859Q-66.480 33.116-66.656 33.310Q-66.832 33.503-67.093 33.503Q-67.359 33.503-67.582 33.370Q-67.804 33.237-67.894 32.999Q-68.082 33.226-68.337 33.364Q-68.593 33.503-68.863 33.503Q-69.187 33.503-69.437 33.394Q-69.687 33.284-69.826 33.060Q-69.964 32.835-69.964 32.503",[1301],[1282,2005,2006,2009],{"fill":1381,"stroke":1381,"style":1406},[1287,2007],{"fill":1289,"d":2008},"m-65.203-32.016 85.358 18.494",[1282,2010,2012],{"transform":2011},"translate(94.782 -45.225)",[1287,2013],{"d":2014,"fill":1381,"stroke":1381,"className":2015,"style":1315},"M-70.101 32.945Q-69.886 33.249-69.222 33.249Q-68.792 33.249-68.435 33.048Q-68.078 32.847-68.078 32.448Q-68.078 32.245-68.238 32.122Q-68.398 31.999-68.605 31.960L-69.070 31.874Q-69.386 31.804-69.601 31.597Q-69.816 31.390-69.816 31.081Q-69.816 30.718-69.611 30.446Q-69.406 30.175-69.076 30.036Q-68.746 29.898-68.390 29.898Q-68.003 29.898-67.693 30.066Q-67.382 30.234-67.382 30.585Q-67.382 30.777-67.488 30.917Q-67.593 31.058-67.781 31.058Q-67.890 31.058-67.972 30.986Q-68.054 30.913-68.054 30.800Q-68.054 30.655-67.957 30.546Q-67.859 30.437-67.718 30.417Q-67.808 30.273-67.999 30.212Q-68.191 30.152-68.406 30.152Q-68.738 30.152-69.011 30.323Q-69.285 30.495-69.285 30.808Q-69.285 30.964-69.173 31.058Q-69.062 31.152-68.886 31.195L-68.429 31.280Q-68.054 31.351-67.802 31.583Q-67.550 31.816-67.550 32.179Q-67.550 32.452-67.695 32.720Q-67.839 32.987-68.078 33.167Q-68.554 33.503-69.238 33.503Q-69.515 33.503-69.796 33.431Q-70.078 33.359-70.269 33.185Q-70.460 33.011-70.460 32.730Q-70.460 32.507-70.332 32.343Q-70.203 32.179-69.984 32.179Q-69.839 32.179-69.751 32.261Q-69.664 32.343-69.664 32.480Q-69.664 32.659-69.794 32.802Q-69.925 32.945-70.101 32.945",[1301],[1282,2017,2018,2021],{"fill":1381,"stroke":1381,"style":1406},[1287,2019],{"fill":1289,"d":2020},"M-65.203 16.354 20.155.704",[1282,2022,2024],{"transform":2023},"translate(94.782 -30.26)",[1287,2025],{"d":2026,"fill":1381,"stroke":1381,"className":2027,"style":1315},"M-70.343 32.753Q-70.343 32.644-70.320 32.538L-69.749 30.273L-70.597 30.273Q-70.703 30.245-70.703 30.144L-70.679 30.042Q-70.660 29.991-70.582 29.976L-69.679 29.976L-69.359 28.714Q-69.332 28.585-69.226 28.505Q-69.121 28.425-68.992 28.425Q-68.882 28.425-68.804 28.499Q-68.726 28.573-68.726 28.683Q-68.726 28.730-68.734 28.753L-69.039 29.976L-68.191 29.976Q-68.093 30.007-68.093 30.097L-68.117 30.202Q-68.124 30.253-68.207 30.273L-69.109 30.273L-69.695 32.593Q-69.734 32.839-69.734 32.890Q-69.734 33.249-69.488 33.249Q-69.124 33.249-68.847 32.933Q-68.570 32.616-68.421 32.226Q-68.390 32.179-68.343 32.179L-68.238 32.179Q-68.199 32.179-68.175 32.208Q-68.152 32.237-68.152 32.273Q-68.152 32.288-68.160 32.304Q-68.343 32.788-68.697 33.146Q-69.050 33.503-69.503 33.503Q-69.847 33.503-70.095 33.296Q-70.343 33.089-70.343 32.753",[1301],[1287,2029],{"fill":1289,"stroke":1991,"d":2030,"style":2031},"M-31.06 27.735V-60.47","stroke-dasharray:3.0,3.0",[1282,2033,2034],{"fill":1991,"stroke":1991},[1282,2035,2036,2043],{"fill":1991,"stroke":1289,"fontFamily":1388,"fontSize":1389},[1282,2037,2039],{"transform":2038},"translate(29.067 3.79)",[1287,2040],{"d":2041,"fill":1991,"stroke":1991,"className":2042,"style":1315},"M-70.613 33.417L-70.613 32.195Q-70.613 32.167-70.582 32.136Q-70.550 32.105-70.527 32.105L-70.421 32.105Q-70.351 32.105-70.335 32.167Q-70.273 32.487-70.134 32.728Q-69.996 32.968-69.763 33.109Q-69.531 33.249-69.222 33.249Q-68.984 33.249-68.775 33.189Q-68.566 33.128-68.429 32.980Q-68.292 32.831-68.292 32.585Q-68.292 32.331-68.503 32.165Q-68.714 31.999-68.984 31.945L-69.605 31.831Q-70.011 31.753-70.312 31.497Q-70.613 31.241-70.613 30.866Q-70.613 30.499-70.412 30.277Q-70.210 30.054-69.886 29.956Q-69.562 29.859-69.222 29.859Q-68.757 29.859-68.460 30.066L-68.238 29.882Q-68.214 29.859-68.183 29.859L-68.132 29.859Q-68.101 29.859-68.074 29.886Q-68.046 29.913-68.046 29.945L-68.046 30.929Q-68.046 30.960-68.072 30.989Q-68.097 31.019-68.132 31.019L-68.238 31.019Q-68.273 31.019-68.300 30.991Q-68.328 30.964-68.328 30.929Q-68.328 30.530-68.580 30.310Q-68.832 30.089-69.230 30.089Q-69.585 30.089-69.869 30.212Q-70.152 30.335-70.152 30.640Q-70.152 30.859-69.951 30.991Q-69.749 31.124-69.503 31.167L-68.878 31.280Q-68.449 31.370-68.140 31.667Q-67.832 31.964-67.832 32.378Q-67.832 32.948-68.230 33.226Q-68.628 33.503-69.222 33.503Q-69.773 33.503-70.124 33.167L-70.421 33.480Q-70.445 33.503-70.480 33.503L-70.527 33.503Q-70.550 33.503-70.582 33.472Q-70.613 33.441-70.613 33.417M-65.718 33.394L-66.789 30.538Q-66.855 30.359-66.986 30.316Q-67.117 30.273-67.374 30.273L-67.374 29.976L-65.695 29.976L-65.695 30.273Q-66.144 30.273-66.144 30.472Q-66.140 30.487-66.138 30.505Q-66.136 30.523-66.136 30.538L-65.343 32.632L-64.632 30.722Q-64.667 30.628-64.667 30.583Q-64.667 30.538-64.703 30.538Q-64.769 30.359-64.900 30.316Q-65.031 30.273-65.285 30.273L-65.285 29.976L-63.695 29.976L-63.695 30.273Q-64.144 30.273-64.144 30.472Q-64.140 30.491-64.138 30.509Q-64.136 30.527-64.136 30.538L-63.304 32.753L-62.550 30.753Q-62.527 30.695-62.527 30.624Q-62.527 30.464-62.664 30.368Q-62.800 30.273-62.968 30.273L-62.968 29.976L-61.582 29.976L-61.582 30.273Q-61.816 30.273-61.994 30.400Q-62.171 30.527-62.253 30.753L-63.238 33.394Q-63.292 33.503-63.406 33.503L-63.464 33.503Q-63.578 33.503-63.621 33.394L-64.480 31.120L-65.335 33.394Q-65.374 33.503-65.496 33.503L-65.550 33.503Q-65.664 33.503-65.718 33.394",[1301],[1282,2044,2045],{"transform":2038},[1287,2046],{"d":2047,"fill":1991,"stroke":1991,"className":2048,"style":1315},"M-61.400 31.671Q-61.400 31.191-61.167 30.775Q-60.935 30.359-60.525 30.109Q-60.115 29.859-59.638 29.859Q-58.908 29.859-58.509 30.300Q-58.111 30.741-58.111 31.472Q-58.111 31.577-58.204 31.601L-60.654 31.601L-60.654 31.671Q-60.654 32.081-60.533 32.437Q-60.411 32.792-60.140 33.009Q-59.868 33.226-59.439 33.226Q-59.075 33.226-58.779 32.997Q-58.482 32.769-58.380 32.417Q-58.372 32.370-58.286 32.355L-58.204 32.355Q-58.111 32.382-58.111 32.464Q-58.111 32.472-58.118 32.503Q-58.181 32.730-58.320 32.913Q-58.458 33.097-58.650 33.230Q-58.841 33.362-59.060 33.433Q-59.279 33.503-59.517 33.503Q-59.888 33.503-60.226 33.366Q-60.564 33.230-60.831 32.978Q-61.099 32.726-61.249 32.386Q-61.400 32.046-61.400 31.671M-60.646 31.362L-58.685 31.362Q-58.685 31.058-58.786 30.767Q-58.888 30.476-59.105 30.294Q-59.322 30.112-59.638 30.112Q-59.939 30.112-60.169 30.300Q-60.400 30.487-60.523 30.779Q-60.646 31.070-60.646 31.362M-57.622 31.671Q-57.622 31.191-57.390 30.775Q-57.158 30.359-56.747 30.109Q-56.337 29.859-55.861 29.859Q-55.130 29.859-54.732 30.300Q-54.333 30.741-54.333 31.472Q-54.333 31.577-54.427 31.601L-56.876 31.601L-56.876 31.671Q-56.876 32.081-56.755 32.437Q-56.634 32.792-56.363 33.009Q-56.091 33.226-55.661 33.226Q-55.298 33.226-55.001 32.997Q-54.704 32.769-54.603 32.417Q-54.595 32.370-54.509 32.355L-54.427 32.355Q-54.333 32.382-54.333 32.464Q-54.333 32.472-54.341 32.503Q-54.404 32.730-54.542 32.913Q-54.681 33.097-54.872 33.230Q-55.064 33.362-55.283 33.433Q-55.501 33.503-55.740 33.503Q-56.111 33.503-56.449 33.366Q-56.786 33.230-57.054 32.978Q-57.322 32.726-57.472 32.386Q-57.622 32.046-57.622 31.671M-56.868 31.362L-54.908 31.362Q-54.908 31.058-55.009 30.767Q-55.111 30.476-55.327 30.294Q-55.544 30.112-55.861 30.112Q-56.161 30.112-56.392 30.300Q-56.622 30.487-56.745 30.779Q-56.868 31.070-56.868 31.362M-51.962 34.976L-53.818 34.976L-53.818 34.683Q-53.548 34.683-53.380 34.638Q-53.212 34.593-53.212 34.417L-53.212 30.593Q-53.212 30.386-53.368 30.333Q-53.525 30.280-53.818 30.280L-53.818 29.984L-52.595 29.898L-52.595 30.362Q-52.365 30.140-52.050 30.019Q-51.736 29.898-51.396 29.898Q-50.923 29.898-50.519 30.144Q-50.115 30.390-49.882 30.806Q-49.650 31.222-49.650 31.698Q-49.650 32.073-49.798 32.402Q-49.947 32.730-50.216 32.982Q-50.486 33.234-50.829 33.368Q-51.173 33.503-51.533 33.503Q-51.822 33.503-52.093 33.382Q-52.365 33.261-52.572 33.050L-52.572 34.417Q-52.572 34.593-52.404 34.638Q-52.236 34.683-51.962 34.683L-51.962 34.976M-52.572 30.761L-52.572 32.601Q-52.419 32.890-52.158 33.070Q-51.896 33.249-51.587 33.249Q-51.302 33.249-51.079 33.111Q-50.857 32.972-50.704 32.741Q-50.552 32.511-50.474 32.239Q-50.396 31.968-50.396 31.698Q-50.396 31.366-50.521 31.009Q-50.646 30.652-50.894 30.415Q-51.142 30.179-51.490 30.179Q-51.814 30.179-52.109 30.335Q-52.404 30.491-52.572 30.761",[1301],[1287,2050],{"fill":2051,"stroke":1289,"d":2052},"var(--tk-warn)","M41.672-6.408a1.6 1.6 0 1 0-3.2 0 1.6 1.6 0 0 0 3.2 0m-1.6 0",[1282,2054,2055],{"fill":2051,"stroke":2051},[1282,2056,2058],{"transform":2057},"translate(113.393 -40.957)",[1287,2059],{"d":2060,"fill":2051,"stroke":2051,"className":2061,"style":1315},"M-69.886 32.409Q-69.886 32.648-69.798 32.837Q-69.710 33.027-69.539 33.138Q-69.367 33.249-69.132 33.249Q-68.624 33.249-68.169 33.056Q-67.714 32.862-67.429 32.487Q-67.410 32.456-67.359 32.456Q-67.308 32.456-67.261 32.507Q-67.214 32.558-67.214 32.609Q-67.214 32.648-67.238 32.671Q-67.554 33.085-68.070 33.294Q-68.585 33.503-69.152 33.503Q-69.453 33.503-69.708 33.402Q-69.964 33.300-70.156 33.112Q-70.347 32.925-70.453 32.667Q-70.558 32.409-70.558 32.120Q-70.558 31.698-70.369 31.296Q-70.179 30.894-69.853 30.577Q-69.527 30.261-69.124 30.079Q-68.722 29.898-68.300 29.898Q-67.917 29.898-67.605 30.064Q-67.292 30.230-67.292 30.585Q-67.292 30.800-67.423 30.960Q-67.554 31.120-67.765 31.120Q-67.898 31.120-67.992 31.034Q-68.085 30.948-68.085 30.816Q-68.085 30.644-67.964 30.511Q-67.843 30.378-67.679 30.355Q-67.882 30.152-68.320 30.152Q-68.687 30.152-68.984 30.370Q-69.281 30.589-69.482 30.941Q-69.683 31.292-69.785 31.691Q-69.886 32.089-69.886 32.409",[1301],[1282,2063,2064,2067],{"fill":1991,"stroke":1991,"style":1406},[1287,2065],{"fill":1289,"d":2066},"M48.608-17.79H68.77",[1287,2068],{"stroke":1289,"d":2069},"m71.37-17.79-4.16-2.08 1.56 2.08-1.56 2.08",[1282,2071,2072,2079],{"stroke":1289,"fontSize":1389},[1282,2073,2075],{"transform":2074},"translate(184.445 -96.807)",[1287,2076],{"d":2077,"fill":1284,"stroke":1284,"className":2078,"style":1315},"M-70.558 32.593Q-70.558 32.109-70.156 31.814Q-69.753 31.519-69.203 31.400Q-68.652 31.280-68.160 31.280L-68.160 30.991Q-68.160 30.765-68.275 30.558Q-68.390 30.351-68.587 30.232Q-68.785 30.112-69.015 30.112Q-69.441 30.112-69.726 30.218Q-69.656 30.245-69.609 30.300Q-69.562 30.355-69.537 30.425Q-69.511 30.495-69.511 30.570Q-69.511 30.675-69.562 30.767Q-69.613 30.859-69.705 30.909Q-69.796 30.960-69.902 30.960Q-70.007 30.960-70.099 30.909Q-70.191 30.859-70.242 30.767Q-70.292 30.675-70.292 30.570Q-70.292 30.152-69.904 30.005Q-69.515 29.859-69.015 29.859Q-68.683 29.859-68.330 29.989Q-67.976 30.120-67.748 30.374Q-67.519 30.628-67.519 30.976L-67.519 32.777Q-67.519 32.909-67.447 33.019Q-67.374 33.128-67.246 33.128Q-67.121 33.128-67.052 33.023Q-66.984 32.917-66.984 32.777L-66.984 32.265L-66.703 32.265L-66.703 32.777Q-66.703 32.980-66.820 33.138Q-66.937 33.296-67.119 33.380Q-67.300 33.464-67.503 33.464Q-67.734 33.464-67.886 33.292Q-68.039 33.120-68.070 32.890Q-68.230 33.171-68.539 33.337Q-68.847 33.503-69.199 33.503Q-69.710 33.503-70.134 33.280Q-70.558 33.058-70.558 32.593M-69.871 32.593Q-69.871 32.878-69.644 33.064Q-69.417 33.249-69.124 33.249Q-68.878 33.249-68.654 33.132Q-68.429 33.015-68.294 32.812Q-68.160 32.609-68.160 32.355L-68.160 31.523Q-68.425 31.523-68.710 31.577Q-68.996 31.632-69.267 31.761Q-69.539 31.890-69.705 32.097Q-69.871 32.304-69.871 32.593M-64.343 33.425L-66.328 33.425L-66.328 33.128Q-66.054 33.128-65.886 33.081Q-65.718 33.034-65.718 32.866L-65.718 30.273L-66.359 30.273L-66.359 29.976L-65.718 29.976L-65.718 29.042Q-65.718 28.777-65.601 28.540Q-65.484 28.304-65.290 28.140Q-65.097 27.976-64.849 27.884Q-64.601 27.792-64.335 27.792Q-64.050 27.792-63.826 27.950Q-63.601 28.109-63.601 28.386Q-63.601 28.542-63.707 28.652Q-63.812 28.761-63.976 28.761Q-64.132 28.761-64.242 28.652Q-64.351 28.542-64.351 28.386Q-64.351 28.179-64.191 28.073Q-64.289 28.050-64.382 28.050Q-64.613 28.050-64.785 28.206Q-64.957 28.362-65.042 28.599Q-65.128 28.835-65.128 29.058L-65.128 29.976L-64.160 29.976L-64.160 30.273L-65.105 30.273L-65.105 32.866Q-65.105 33.034-64.878 33.081Q-64.652 33.128-64.343 33.128L-64.343 33.425M-63.191 32.464L-63.191 30.273L-63.894 30.273L-63.894 30.019Q-63.539 30.019-63.296 29.786Q-63.054 29.554-62.943 29.206Q-62.832 28.859-62.832 28.503L-62.550 28.503L-62.550 29.976L-61.374 29.976L-61.374 30.273L-62.550 30.273L-62.550 32.448Q-62.550 32.769-62.431 32.997Q-62.312 33.226-62.031 33.226Q-61.851 33.226-61.734 33.103Q-61.617 32.980-61.564 32.800Q-61.511 32.620-61.511 32.448L-61.511 31.976L-61.230 31.976L-61.230 32.464Q-61.230 32.718-61.335 32.958Q-61.441 33.198-61.638 33.351Q-61.835 33.503-62.093 33.503Q-62.410 33.503-62.662 33.380Q-62.914 33.257-63.052 33.023Q-63.191 32.788-63.191 32.464M-60.511 31.671Q-60.511 31.191-60.279 30.775Q-60.046 30.359-59.636 30.109Q-59.226 29.859-58.749 29.859Q-58.019 29.859-57.621 30.300Q-57.222 30.741-57.222 31.472Q-57.222 31.577-57.316 31.601L-59.765 31.601L-59.765 31.671Q-59.765 32.081-59.644 32.437Q-59.523 32.792-59.251 33.009Q-58.980 33.226-58.550 33.226Q-58.187 33.226-57.890 32.997Q-57.593 32.769-57.492 32.417Q-57.484 32.370-57.398 32.355L-57.316 32.355Q-57.222 32.382-57.222 32.464Q-57.222 32.472-57.230 32.503Q-57.292 32.730-57.431 32.913Q-57.570 33.097-57.761 33.230Q-57.953 33.362-58.171 33.433Q-58.390 33.503-58.628 33.503Q-58.999 33.503-59.337 33.366Q-59.675 33.230-59.943 32.978Q-60.210 32.726-60.361 32.386Q-60.511 32.046-60.511 31.671M-59.757 31.362L-57.796 31.362Q-57.796 31.058-57.898 30.767Q-57.999 30.476-58.216 30.294Q-58.433 30.112-58.749 30.112Q-59.050 30.112-59.281 30.300Q-59.511 30.487-59.634 30.779Q-59.757 31.070-59.757 31.362M-54.726 33.425L-56.707 33.425L-56.707 33.128Q-56.437 33.128-56.269 33.083Q-56.101 33.038-56.101 32.866L-56.101 30.730Q-56.101 30.515-56.164 30.419Q-56.226 30.323-56.343 30.302Q-56.460 30.280-56.707 30.280L-56.707 29.984L-55.539 29.898L-55.539 30.683Q-55.460 30.472-55.308 30.286Q-55.156 30.101-54.957 29.999Q-54.757 29.898-54.531 29.898Q-54.285 29.898-54.093 30.042Q-53.902 30.187-53.902 30.417Q-53.902 30.573-54.007 30.683Q-54.113 30.792-54.269 30.792Q-54.425 30.792-54.535 30.683Q-54.644 30.573-54.644 30.417Q-54.644 30.257-54.539 30.152Q-54.863 30.152-55.078 30.380Q-55.292 30.609-55.388 30.948Q-55.484 31.288-55.484 31.593L-55.484 32.866Q-55.484 33.034-55.257 33.081Q-55.031 33.128-54.726 33.128",[1301],[1282,2080,2081],{"transform":2074},[1287,2082],{"d":2083,"fill":1284,"stroke":1284,"className":2084,"style":1315},"M-49.809 32.409Q-49.809 32.648-49.721 32.837Q-49.633 33.027-49.462 33.138Q-49.290 33.249-49.055 33.249Q-48.547 33.249-48.092 33.056Q-47.637 32.862-47.352 32.487Q-47.333 32.456-47.282 32.456Q-47.231 32.456-47.184 32.507Q-47.137 32.558-47.137 32.609Q-47.137 32.648-47.161 32.671Q-47.477 33.085-47.993 33.294Q-48.508 33.503-49.075 33.503Q-49.376 33.503-49.631 33.402Q-49.887 33.300-50.079 33.112Q-50.270 32.925-50.376 32.667Q-50.481 32.409-50.481 32.120Q-50.481 31.698-50.292 31.296Q-50.102 30.894-49.776 30.577Q-49.450 30.261-49.047 30.079Q-48.645 29.898-48.223 29.898Q-47.840 29.898-47.528 30.064Q-47.215 30.230-47.215 30.585Q-47.215 30.800-47.346 30.960Q-47.477 31.120-47.688 31.120Q-47.821 31.120-47.915 31.034Q-48.008 30.948-48.008 30.816Q-48.008 30.644-47.887 30.511Q-47.766 30.378-47.602 30.355Q-47.805 30.152-48.243 30.152Q-48.610 30.152-48.907 30.370Q-49.204 30.589-49.405 30.941Q-49.606 31.292-49.708 31.691Q-49.809 32.089-49.809 32.409",[1301],[1282,2086,2087,2090],{"fill":1991,"stroke":1991,"style":1406},[1287,2088],{"fill":1289,"d":2089},"M91.287-51.933H173.8",[1282,2091,2092],{"fill":1284,"stroke":1284},[1282,2093,2095],{"transform":2094},"translate(248.426 -83.636)",[1287,2096],{"d":2002,"fill":1284,"stroke":1284,"className":2097,"style":1315},[1301],[1282,2099,2100,2103],{"fill":1381,"stroke":1381,"style":1406},[1287,2101],{"fill":1289,"d":2102},"M91.287-3.563 173.8-29.171",[1282,2104,2106],{"transform":2105},"translate(248.426 -60.136)",[1287,2107],{"d":2026,"fill":1381,"stroke":1381,"className":2108,"style":1315},[1301],[1282,2110,2111,2114],{"fill":1381,"stroke":1381,"style":1406},[1287,2112],{"fill":1289,"d":2113},"M91.287-9.254 173.8 13.51",[1282,2115,2117],{"transform":2116},"translate(248.426 -18.195)",[1287,2118],{"d":2014,"fill":1381,"stroke":1381,"className":2119,"style":1315},[1301],[1282,2121,2122],{"fill":2051,"stroke":2051},[1282,2123,2124,2131,2137,2143,2149,2155,2161,2167,2173,2179,2185,2191,2197],{"fill":2051,"stroke":1289,"fontSize":1389},[1282,2125,2127],{"transform":2126},"translate(162.514 13.64)",[1287,2128],{"d":2129,"fill":2051,"stroke":2051,"className":2130,"style":1315},"M-62.671 23.925L-64.526 23.925L-64.526 23.628Q-64.253 23.628-64.085 23.581Q-63.917 23.534-63.917 23.366L-63.917 21.230Q-63.917 21.015-63.980 20.919Q-64.042 20.823-64.161 20.802Q-64.280 20.780-64.526 20.780L-64.526 20.484L-63.335 20.398L-63.335 21.132Q-63.222 20.917-63.028 20.749Q-62.835 20.581-62.597 20.489Q-62.359 20.398-62.105 20.398Q-60.937 20.398-60.937 21.476L-60.937 23.366Q-60.937 23.534-60.767 23.581Q-60.597 23.628-60.327 23.628L-60.327 23.925L-62.183 23.925L-62.183 23.628Q-61.909 23.628-61.741 23.581Q-61.573 23.534-61.573 23.366L-61.573 21.491Q-61.573 21.109-61.694 20.880Q-61.816 20.652-62.167 20.652Q-62.480 20.652-62.734 20.814Q-62.987 20.976-63.134 21.245Q-63.280 21.515-63.280 21.812L-63.280 23.366Q-63.280 23.534-63.110 23.581Q-62.941 23.628-62.671 23.628L-62.671 23.925M-59.882 22.171Q-59.882 21.691-59.650 21.275Q-59.417 20.859-59.007 20.609Q-58.597 20.359-58.120 20.359Q-57.390 20.359-56.991 20.800Q-56.593 21.241-56.593 21.972Q-56.593 22.077-56.687 22.101L-59.136 22.101L-59.136 22.171Q-59.136 22.581-59.015 22.937Q-58.894 23.292-58.622 23.509Q-58.351 23.726-57.921 23.726Q-57.558 23.726-57.261 23.497Q-56.964 23.269-56.862 22.917Q-56.855 22.870-56.769 22.855L-56.687 22.855Q-56.593 22.882-56.593 22.964Q-56.593 22.972-56.601 23.003Q-56.663 23.230-56.802 23.413Q-56.941 23.597-57.132 23.730Q-57.323 23.863-57.542 23.933Q-57.761 24.003-57.999 24.003Q-58.370 24.003-58.708 23.866Q-59.046 23.730-59.314 23.478Q-59.581 23.226-59.732 22.886Q-59.882 22.546-59.882 22.171M-59.128 21.863L-57.167 21.863Q-57.167 21.558-57.269 21.267Q-57.370 20.976-57.587 20.794Q-57.804 20.613-58.120 20.613Q-58.421 20.613-58.651 20.800Q-58.882 20.988-59.005 21.279Q-59.128 21.570-59.128 21.863M-54.519 23.894L-55.589 21.038Q-55.655 20.859-55.786 20.816Q-55.917 20.773-56.175 20.773L-56.175 20.476L-54.495 20.476L-54.495 20.773Q-54.944 20.773-54.944 20.972Q-54.941 20.988-54.939 21.005Q-54.937 21.023-54.937 21.038L-54.144 23.132L-53.433 21.222Q-53.468 21.128-53.468 21.083Q-53.468 21.038-53.503 21.038Q-53.569 20.859-53.700 20.816Q-53.831 20.773-54.085 20.773L-54.085 20.476L-52.495 20.476L-52.495 20.773Q-52.944 20.773-52.944 20.972Q-52.941 20.991-52.939 21.009Q-52.937 21.027-52.937 21.038L-52.105 23.253L-51.351 21.253Q-51.327 21.195-51.327 21.124Q-51.327 20.964-51.464 20.868Q-51.601 20.773-51.769 20.773L-51.769 20.476L-50.382 20.476L-50.382 20.773Q-50.616 20.773-50.794 20.900Q-50.972 21.027-51.054 21.253L-52.038 23.894Q-52.093 24.003-52.206 24.003L-52.265 24.003Q-52.378 24.003-52.421 23.894L-53.280 21.620L-54.136 23.894Q-54.175 24.003-54.296 24.003L-54.351 24.003Q-54.464 24.003-54.519 23.894",[1301],[1282,2132,2133],{"transform":2126},[1287,2134],{"d":2135,"fill":2051,"stroke":2051,"className":2136,"style":1315},"M-47.030 23.093Q-47.030 22.609-46.628 22.314Q-46.225 22.019-45.675 21.900Q-45.124 21.780-44.632 21.780L-44.632 21.491Q-44.632 21.265-44.747 21.058Q-44.862 20.851-45.059 20.732Q-45.257 20.613-45.487 20.613Q-45.913 20.613-46.198 20.718Q-46.128 20.745-46.081 20.800Q-46.034 20.855-46.009 20.925Q-45.983 20.995-45.983 21.070Q-45.983 21.175-46.034 21.267Q-46.085 21.359-46.177 21.409Q-46.268 21.460-46.374 21.460Q-46.479 21.460-46.571 21.409Q-46.663 21.359-46.714 21.267Q-46.764 21.175-46.764 21.070Q-46.764 20.652-46.376 20.505Q-45.987 20.359-45.487 20.359Q-45.155 20.359-44.802 20.489Q-44.448 20.620-44.220 20.874Q-43.991 21.128-43.991 21.476L-43.991 23.277Q-43.991 23.409-43.919 23.519Q-43.846 23.628-43.718 23.628Q-43.593 23.628-43.524 23.523Q-43.456 23.417-43.456 23.277L-43.456 22.765L-43.175 22.765L-43.175 23.277Q-43.175 23.480-43.292 23.638Q-43.409 23.796-43.591 23.880Q-43.772 23.964-43.975 23.964Q-44.206 23.964-44.358 23.792Q-44.511 23.620-44.542 23.390Q-44.702 23.671-45.011 23.837Q-45.319 24.003-45.671 24.003Q-46.182 24.003-46.606 23.780Q-47.030 23.558-47.030 23.093M-46.343 23.093Q-46.343 23.378-46.116 23.564Q-45.889 23.749-45.596 23.749Q-45.350 23.749-45.126 23.632Q-44.901 23.515-44.766 23.312Q-44.632 23.109-44.632 22.855L-44.632 22.023Q-44.897 22.023-45.182 22.077Q-45.468 22.132-45.739 22.261Q-46.011 22.390-46.177 22.597Q-46.343 22.804-46.343 23.093M-41.065 24.003Q-41.546 24.003-41.954 23.759Q-42.362 23.515-42.600 23.101Q-42.839 22.687-42.839 22.198Q-42.839 21.706-42.581 21.290Q-42.323 20.874-41.891 20.636Q-41.460 20.398-40.968 20.398Q-40.346 20.398-39.897 20.835L-39.897 19.206Q-39.897 18.991-39.960 18.896Q-40.022 18.800-40.139 18.779Q-40.257 18.757-40.503 18.757L-40.503 18.460L-39.280 18.374L-39.280 23.183Q-39.280 23.394-39.218 23.489Q-39.155 23.585-39.038 23.607Q-38.921 23.628-38.671 23.628L-38.671 23.925L-39.921 24.003L-39.921 23.519Q-40.386 24.003-41.065 24.003M-40.999 23.749Q-40.659 23.749-40.366 23.558Q-40.073 23.366-39.921 23.070L-39.921 21.238Q-40.069 20.964-40.331 20.808Q-40.593 20.652-40.905 20.652Q-41.530 20.652-41.813 21.099Q-42.096 21.546-42.096 22.206Q-42.096 22.851-41.845 23.300Q-41.593 23.749-40.999 23.749M-38.721 24.902Q-38.721 24.796-38.671 24.704Q-38.620 24.613-38.528 24.562Q-38.436 24.511-38.331 24.511Q-38.221 24.511-38.130 24.562Q-38.038 24.613-37.987 24.704Q-37.936 24.796-37.936 24.902Q-37.936 25.116-38.128 25.238Q-37.971 25.300-37.745 25.300Q-37.444 25.300-37.315 24.991Q-37.186 24.683-37.186 24.316L-37.186 21.230Q-37.186 20.925-37.333 20.853Q-37.479 20.780-37.858 20.780L-37.858 20.484L-36.569 20.398L-36.569 24.339Q-36.569 24.659-36.729 24.943Q-36.889 25.226-37.167 25.392Q-37.444 25.558-37.761 25.558Q-38.120 25.558-38.421 25.394Q-38.721 25.230-38.721 24.902M-37.491 19.003Q-37.491 18.820-37.352 18.685Q-37.214 18.550-37.026 18.550Q-36.839 18.550-36.704 18.681Q-36.569 18.812-36.569 19.003Q-36.569 19.202-36.702 19.335Q-36.835 19.468-37.026 19.468Q-37.218 19.468-37.354 19.331Q-37.491 19.195-37.491 19.003M-35.471 23.093Q-35.471 22.609-35.069 22.314Q-34.667 22.019-34.116 21.900Q-33.565 21.780-33.073 21.780L-33.073 21.491Q-33.073 21.265-33.188 21.058Q-33.303 20.851-33.501 20.732Q-33.698 20.613-33.928 20.613Q-34.354 20.613-34.639 20.718Q-34.569 20.745-34.522 20.800Q-34.475 20.855-34.450 20.925Q-34.425 20.995-34.425 21.070Q-34.425 21.175-34.475 21.267Q-34.526 21.359-34.618 21.409Q-34.710 21.460-34.815 21.460Q-34.921 21.460-35.012 21.409Q-35.104 21.359-35.155 21.267Q-35.206 21.175-35.206 21.070Q-35.206 20.652-34.817 20.505Q-34.428 20.359-33.928 20.359Q-33.596 20.359-33.243 20.489Q-32.889 20.620-32.661 20.874Q-32.432 21.128-32.432 21.476L-32.432 23.277Q-32.432 23.409-32.360 23.519Q-32.288 23.628-32.159 23.628Q-32.034 23.628-31.966 23.523Q-31.897 23.417-31.897 23.277L-31.897 22.765L-31.616 22.765L-31.616 23.277Q-31.616 23.480-31.733 23.638Q-31.850 23.796-32.032 23.880Q-32.214 23.964-32.417 23.964Q-32.647 23.964-32.800 23.792Q-32.952 23.620-32.983 23.390Q-33.143 23.671-33.452 23.837Q-33.761 24.003-34.112 24.003Q-34.624 24.003-35.048 23.780Q-35.471 23.558-35.471 23.093M-34.784 23.093Q-34.784 23.378-34.557 23.564Q-34.331 23.749-34.038 23.749Q-33.792 23.749-33.567 23.632Q-33.343 23.515-33.208 23.312Q-33.073 23.109-33.073 22.855L-33.073 22.023Q-33.339 22.023-33.624 22.077Q-33.909 22.132-34.180 22.261Q-34.452 22.390-34.618 22.597Q-34.784 22.804-34.784 23.093M-31.280 22.198Q-31.280 21.702-31.030 21.277Q-30.780 20.851-30.360 20.605Q-29.940 20.359-29.440 20.359Q-28.901 20.359-28.511 20.484Q-28.120 20.609-28.120 21.023Q-28.120 21.128-28.171 21.220Q-28.221 21.312-28.313 21.363Q-28.405 21.413-28.514 21.413Q-28.620 21.413-28.712 21.363Q-28.803 21.312-28.854 21.220Q-28.905 21.128-28.905 21.023Q-28.905 20.800-28.737 20.695Q-28.960 20.636-29.432 20.636Q-29.729 20.636-29.944 20.775Q-30.159 20.913-30.290 21.144Q-30.421 21.374-30.479 21.644Q-30.538 21.913-30.538 22.198Q-30.538 22.593-30.405 22.943Q-30.272 23.292-30.001 23.509Q-29.729 23.726-29.331 23.726Q-28.956 23.726-28.680 23.509Q-28.405 23.292-28.303 22.933Q-28.288 22.870-28.225 22.870L-28.120 22.870Q-28.085 22.870-28.059 22.898Q-28.034 22.925-28.034 22.964L-28.034 22.988Q-28.167 23.468-28.552 23.736Q-28.936 24.003-29.440 24.003Q-29.803 24.003-30.137 23.866Q-30.471 23.730-30.731 23.480Q-30.991 23.230-31.136 22.894Q-31.280 22.558-31.280 22.198M-27.546 22.171Q-27.546 21.691-27.313 21.275Q-27.081 20.859-26.671 20.609Q-26.261 20.359-25.784 20.359Q-25.053 20.359-24.655 20.800Q-24.257 21.241-24.257 21.972Q-24.257 22.077-24.350 22.101L-26.800 22.101L-26.800 22.171Q-26.800 22.581-26.678 22.937Q-26.557 23.292-26.286 23.509Q-26.014 23.726-25.585 23.726Q-25.221 23.726-24.925 23.497Q-24.628 23.269-24.526 22.917Q-24.518 22.870-24.432 22.855L-24.350 22.855Q-24.257 22.882-24.257 22.964Q-24.257 22.972-24.264 23.003Q-24.327 23.230-24.466 23.413Q-24.604 23.597-24.796 23.730Q-24.987 23.863-25.206 23.933Q-25.425 24.003-25.663 24.003Q-26.034 24.003-26.372 23.866Q-26.710 23.730-26.977 23.478Q-27.245 23.226-27.395 22.886Q-27.546 22.546-27.546 22.171M-26.792 21.863L-24.831 21.863Q-24.831 21.558-24.932 21.267Q-25.034 20.976-25.251 20.794Q-25.468 20.613-25.784 20.613Q-26.085 20.613-26.315 20.800Q-26.546 20.988-26.669 21.279Q-26.792 21.570-26.792 21.863M-21.839 23.925L-23.694 23.925L-23.694 23.628Q-23.421 23.628-23.253 23.581Q-23.085 23.534-23.085 23.366L-23.085 21.230Q-23.085 21.015-23.147 20.919Q-23.210 20.823-23.329 20.802Q-23.448 20.780-23.694 20.780L-23.694 20.484L-22.503 20.398L-22.503 21.132Q-22.389 20.917-22.196 20.749Q-22.003 20.581-21.764 20.489Q-21.526 20.398-21.272 20.398Q-20.104 20.398-20.104 21.476L-20.104 23.366Q-20.104 23.534-19.934 23.581Q-19.764 23.628-19.495 23.628L-19.495 23.925L-21.350 23.925L-21.350 23.628Q-21.077 23.628-20.909 23.581Q-20.741 23.534-20.741 23.366L-20.741 21.491Q-20.741 21.109-20.862 20.880Q-20.983 20.652-21.335 20.652Q-21.647 20.652-21.901 20.814Q-22.155 20.976-22.302 21.245Q-22.448 21.515-22.448 21.812L-22.448 23.366Q-22.448 23.534-22.278 23.581Q-22.108 23.628-21.839 23.628L-21.839 23.925M-19.007 22.198Q-19.007 21.702-18.757 21.277Q-18.507 20.851-18.087 20.605Q-17.667 20.359-17.167 20.359Q-16.628 20.359-16.237 20.484Q-15.846 20.609-15.846 21.023Q-15.846 21.128-15.897 21.220Q-15.948 21.312-16.040 21.363Q-16.132 21.413-16.241 21.413Q-16.346 21.413-16.438 21.363Q-16.530 21.312-16.581 21.220Q-16.632 21.128-16.632 21.023Q-16.632 20.800-16.464 20.695Q-16.686 20.636-17.159 20.636Q-17.456 20.636-17.671 20.775Q-17.886 20.913-18.016 21.144Q-18.147 21.374-18.206 21.644Q-18.264 21.913-18.264 22.198Q-18.264 22.593-18.132 22.943Q-17.999 23.292-17.727 23.509Q-17.456 23.726-17.057 23.726Q-16.682 23.726-16.407 23.509Q-16.132 23.292-16.030 22.933Q-16.014 22.870-15.952 22.870L-15.846 22.870Q-15.811 22.870-15.786 22.898Q-15.761 22.925-15.761 22.964L-15.761 22.988Q-15.893 23.468-16.278 23.736Q-16.663 24.003-17.167 24.003Q-17.530 24.003-17.864 23.866Q-18.198 23.730-18.458 23.480Q-18.718 23.230-18.862 22.894Q-19.007 22.558-19.007 22.198M-13.413 23.925L-15.190 23.925L-15.190 23.628Q-14.917 23.628-14.749 23.581Q-14.581 23.534-14.581 23.366L-14.581 21.230Q-14.581 21.015-14.637 20.919Q-14.694 20.823-14.807 20.802Q-14.921 20.780-15.167 20.780L-15.167 20.484L-13.968 20.398L-13.968 23.366Q-13.968 23.534-13.821 23.581Q-13.675 23.628-13.413 23.628L-13.413 23.925M-14.854 19.003Q-14.854 18.812-14.720 18.681Q-14.585 18.550-14.389 18.550Q-14.268 18.550-14.165 18.613Q-14.061 18.675-13.999 18.779Q-13.936 18.882-13.936 19.003Q-13.936 19.198-14.067 19.333Q-14.198 19.468-14.389 19.468Q-14.589 19.468-14.721 19.335Q-14.854 19.202-14.854 19.003M-12.913 22.171Q-12.913 21.691-12.680 21.275Q-12.448 20.859-12.038 20.609Q-11.628 20.359-11.151 20.359Q-10.421 20.359-10.022 20.800Q-9.624 21.241-9.624 21.972Q-9.624 22.077-9.718 22.101L-12.167 22.101L-12.167 22.171Q-12.167 22.581-12.046 22.937Q-11.925 23.292-11.653 23.509Q-11.382 23.726-10.952 23.726Q-10.589 23.726-10.292 23.497Q-9.995 23.269-9.893 22.917Q-9.886 22.870-9.800 22.855L-9.718 22.855Q-9.624 22.882-9.624 22.964Q-9.624 22.972-9.632 23.003Q-9.694 23.230-9.833 23.413Q-9.971 23.597-10.163 23.730Q-10.354 23.863-10.573 23.933Q-10.792 24.003-11.030 24.003Q-11.401 24.003-11.739 23.866Q-12.077 23.730-12.345 23.478Q-12.612 23.226-12.762 22.886Q-12.913 22.546-12.913 22.171M-12.159 21.863L-10.198 21.863Q-10.198 21.558-10.300 21.267Q-10.401 20.976-10.618 20.794Q-10.835 20.613-11.151 20.613Q-11.452 20.613-11.682 20.800Q-11.913 20.988-12.036 21.279Q-12.159 21.570-12.159 21.863M-9.093 23.917L-9.093 22.695Q-9.093 22.667-9.061 22.636Q-9.030 22.605-9.007 22.605L-8.901 22.605Q-8.831 22.605-8.815 22.667Q-8.753 22.988-8.614 23.228Q-8.475 23.468-8.243 23.609Q-8.011 23.749-7.702 23.749Q-7.464 23.749-7.255 23.689Q-7.046 23.628-6.909 23.480Q-6.772 23.331-6.772 23.085Q-6.772 22.831-6.983 22.665Q-7.194 22.499-7.464 22.445L-8.085 22.331Q-8.491 22.253-8.792 21.997Q-9.093 21.741-9.093 21.366Q-9.093 20.999-8.891 20.777Q-8.690 20.554-8.366 20.456Q-8.042 20.359-7.702 20.359Q-7.237 20.359-6.940 20.566L-6.718 20.382Q-6.694 20.359-6.663 20.359L-6.612 20.359Q-6.581 20.359-6.553 20.386Q-6.526 20.413-6.526 20.445L-6.526 21.429Q-6.526 21.460-6.552 21.489Q-6.577 21.519-6.612 21.519L-6.718 21.519Q-6.753 21.519-6.780 21.491Q-6.807 21.464-6.807 21.429Q-6.807 21.030-7.059 20.810Q-7.311 20.589-7.710 20.589Q-8.065 20.589-8.348 20.712Q-8.632 20.835-8.632 21.140Q-8.632 21.359-8.430 21.491Q-8.229 21.624-7.983 21.667L-7.358 21.780Q-6.928 21.870-6.620 22.167Q-6.311 22.464-6.311 22.878Q-6.311 23.448-6.710 23.726Q-7.108 24.003-7.702 24.003Q-8.253 24.003-8.604 23.667L-8.901 23.980Q-8.925 24.003-8.960 24.003L-9.007 24.003Q-9.030 24.003-9.061 23.972Q-9.093 23.941-9.093 23.917M-5.303 23.460Q-5.303 23.277-5.167 23.140Q-5.030 23.003-4.839 23.003Q-4.647 23.003-4.514 23.136Q-4.382 23.269-4.382 23.460Q-4.382 23.659-4.514 23.792Q-4.647 23.925-4.839 23.925Q-5.030 23.925-5.167 23.788Q-5.303 23.652-5.303 23.460M-5.303 20.933Q-5.303 20.749-5.167 20.613Q-5.030 20.476-4.839 20.476Q-4.647 20.476-4.514 20.609Q-4.382 20.741-4.382 20.933Q-4.382 21.132-4.514 21.265Q-4.647 21.398-4.839 21.398Q-5.030 21.398-5.167 21.261Q-5.303 21.124-5.303 20.933",[1301],[1282,2138,2139],{"transform":2126},[1287,2140],{"d":2141,"fill":2051,"stroke":2051,"className":2142,"style":1315},"M-68.277 35.417Q-68.890 34.960-69.292 34.325Q-69.695 33.691-69.890 32.945Q-70.085 32.198-70.085 31.425Q-70.085 30.652-69.890 29.905Q-69.695 29.159-69.292 28.525Q-68.890 27.890-68.277 27.433Q-68.265 27.429-68.257 27.427Q-68.249 27.425-68.238 27.425L-68.160 27.425Q-68.121 27.425-68.095 27.452Q-68.070 27.480-68.070 27.523Q-68.070 27.573-68.101 27.593Q-68.609 28.046-68.931 28.669Q-69.253 29.292-69.394 29.987Q-69.535 30.683-69.535 31.425Q-69.535 32.159-69.396 32.859Q-69.257 33.558-68.933 34.183Q-68.609 34.808-68.101 35.257Q-68.070 35.277-68.070 35.327Q-68.070 35.370-68.095 35.398Q-68.121 35.425-68.160 35.425L-68.238 35.425Q-68.246 35.421-68.255 35.419Q-68.265 35.417-68.277 35.417",[1301],[1282,2144,2145],{"transform":2126},[1287,2146],{"d":2147,"fill":2051,"stroke":2051,"className":2148,"style":1315},"M-66.658 32.503Q-66.658 32.253-66.584 31.966Q-66.510 31.679-66.373 31.327Q-66.236 30.976-66.174 30.808Q-66.084 30.585-66.084 30.402Q-66.084 30.152-66.252 30.152Q-66.568 30.152-66.777 30.458Q-66.986 30.765-67.092 31.152Q-67.104 31.226-67.174 31.226L-67.275 31.226Q-67.311 31.226-67.338 31.191Q-67.365 31.155-67.365 31.128L-67.365 31.097Q-67.240 30.636-66.943 30.267Q-66.647 29.898-66.236 29.898Q-66.041 29.898-65.867 29.982Q-65.693 30.066-65.592 30.218Q-65.490 30.370-65.490 30.577Q-65.490 30.730-65.549 30.866Q-65.639 31.097-65.740 31.362Q-65.842 31.628-65.899 31.810Q-65.955 31.991-66 32.206Q-66.045 32.421-66.045 32.616Q-66.045 32.890-65.922 33.070Q-65.799 33.249-65.541 33.249Q-65.272 33.249-64.963 33.021Q-64.654 32.792-64.604 32.538L-64.037 30.265Q-63.998 30.140-63.895 30.058Q-63.791 29.976-63.666 29.976Q-63.557 29.976-63.477 30.050Q-63.397 30.124-63.397 30.234Q-63.397 30.257-63.412 30.320L-63.979 32.593Q-63.983 32.632-63.996 32.693Q-64.010 32.753-64.016 32.804Q-64.022 32.855-64.022 32.890Q-64.022 33.249-63.772 33.249Q-63.631 33.249-63.529 33.142Q-63.428 33.034-63.363 32.880Q-63.299 32.726-63.250 32.536Q-63.201 32.347-63.182 32.249Q-63.147 32.179-63.092 32.179L-62.986 32.179Q-62.947 32.179-62.924 32.208Q-62.900 32.237-62.900 32.273Q-62.900 32.288-62.908 32.304Q-62.979 32.601-63.076 32.859Q-63.174 33.116-63.350 33.310Q-63.525 33.503-63.787 33.503Q-64.053 33.503-64.275 33.370Q-64.498 33.237-64.588 32.999Q-64.775 33.226-65.031 33.364Q-65.287 33.503-65.557 33.503Q-65.881 33.503-66.131 33.394Q-66.381 33.284-66.520 33.060Q-66.658 32.835-66.658 32.503M-61.842 34.831Q-61.842 34.808-61.811 34.761Q-61.518 34.499-61.352 34.132Q-61.186 33.765-61.186 33.378L-61.186 33.320Q-61.315 33.425-61.483 33.425Q-61.674 33.425-61.811 33.292Q-61.947 33.159-61.947 32.960Q-61.947 32.769-61.811 32.636Q-61.674 32.503-61.483 32.503Q-61.182 32.503-61.057 32.773Q-60.932 33.042-60.932 33.378Q-60.932 33.827-61.113 34.241Q-61.295 34.655-61.635 34.952Q-61.658 34.976-61.697 34.976Q-61.744 34.976-61.793 34.931Q-61.842 34.886-61.842 34.831",[1301],[1282,2150,2151],{"transform":2126},[1287,2152],{"d":2153,"fill":2051,"stroke":2051,"className":2154,"style":1315},"M-58.338 32.753Q-58.338 32.644-58.315 32.538L-57.744 30.273L-58.592 30.273Q-58.698 30.245-58.698 30.144L-58.674 30.042Q-58.655 29.991-58.577 29.976L-57.674 29.976L-57.354 28.714Q-57.327 28.585-57.221 28.505Q-57.116 28.425-56.987 28.425Q-56.877 28.425-56.799 28.499Q-56.721 28.573-56.721 28.683Q-56.721 28.730-56.729 28.753L-57.034 29.976L-56.186 29.976Q-56.088 30.007-56.088 30.097L-56.112 30.202Q-56.119 30.253-56.202 30.273L-57.104 30.273L-57.690 32.593Q-57.729 32.839-57.729 32.890Q-57.729 33.249-57.483 33.249Q-57.119 33.249-56.842 32.933Q-56.565 32.616-56.416 32.226Q-56.385 32.179-56.338 32.179L-56.233 32.179Q-56.194 32.179-56.170 32.208Q-56.147 32.237-56.147 32.273Q-56.147 32.288-56.155 32.304Q-56.338 32.788-56.692 33.146Q-57.045 33.503-57.498 33.503Q-57.842 33.503-58.090 33.296Q-58.338 33.089-58.338 32.753",[1301],[1282,2156,2157],{"transform":2126},[1287,2158],{"d":2159,"fill":2051,"stroke":2051,"className":2160,"style":1315},"M-55.179 35.425L-55.261 35.425Q-55.297 35.425-55.322 35.396Q-55.347 35.366-55.347 35.327Q-55.347 35.277-55.316 35.257Q-54.929 34.921-54.646 34.472Q-54.363 34.023-54.197 33.523Q-54.031 33.023-53.957 32.505Q-53.883 31.987-53.883 31.425Q-53.883 30.855-53.957 30.339Q-54.031 29.823-54.197 29.327Q-54.363 28.831-54.642 28.384Q-54.922 27.937-55.316 27.593Q-55.347 27.573-55.347 27.523Q-55.347 27.484-55.322 27.454Q-55.297 27.425-55.261 27.425L-55.179 27.425Q-55.168 27.425-55.158 27.427Q-55.148 27.429-55.140 27.433Q-54.527 27.890-54.125 28.525Q-53.722 29.159-53.527 29.905Q-53.332 30.652-53.332 31.425Q-53.332 32.198-53.527 32.945Q-53.722 33.691-54.125 34.325Q-54.527 34.960-55.140 35.417Q-55.152 35.417-55.160 35.419Q-55.168 35.421-55.179 35.425",[1301],[1282,2162,2163],{"transform":2126},[1287,2164],{"d":2165,"fill":2051,"stroke":2051,"className":2166,"style":1315},"M-49.345 32.593Q-49.345 32.109-48.943 31.814Q-48.540 31.519-47.990 31.400Q-47.439 31.280-46.947 31.280L-46.947 30.991Q-46.947 30.765-47.062 30.558Q-47.177 30.351-47.374 30.232Q-47.572 30.112-47.802 30.112Q-48.228 30.112-48.513 30.218Q-48.443 30.245-48.396 30.300Q-48.349 30.355-48.324 30.425Q-48.298 30.495-48.298 30.570Q-48.298 30.675-48.349 30.767Q-48.400 30.859-48.492 30.909Q-48.583 30.960-48.689 30.960Q-48.794 30.960-48.886 30.909Q-48.978 30.859-49.029 30.767Q-49.079 30.675-49.079 30.570Q-49.079 30.152-48.691 30.005Q-48.302 29.859-47.802 29.859Q-47.470 29.859-47.117 29.989Q-46.763 30.120-46.535 30.374Q-46.306 30.628-46.306 30.976L-46.306 32.777Q-46.306 32.909-46.234 33.019Q-46.161 33.128-46.033 33.128Q-45.908 33.128-45.839 33.023Q-45.771 32.917-45.771 32.777L-45.771 32.265L-45.490 32.265L-45.490 32.777Q-45.490 32.980-45.607 33.138Q-45.724 33.296-45.906 33.380Q-46.087 33.464-46.290 33.464Q-46.521 33.464-46.673 33.292Q-46.826 33.120-46.857 32.890Q-47.017 33.171-47.326 33.337Q-47.634 33.503-47.986 33.503Q-48.497 33.503-48.921 33.280Q-49.345 33.058-49.345 32.593M-48.658 32.593Q-48.658 32.878-48.431 33.064Q-48.204 33.249-47.911 33.249Q-47.665 33.249-47.441 33.132Q-47.216 33.015-47.081 32.812Q-46.947 32.609-46.947 32.355L-46.947 31.523Q-47.212 31.523-47.497 31.577Q-47.783 31.632-48.054 31.761Q-48.326 31.890-48.492 32.097Q-48.658 32.304-48.658 32.593M-43.267 33.425L-45.122 33.425L-45.122 33.128Q-44.849 33.128-44.681 33.081Q-44.513 33.034-44.513 32.866L-44.513 30.730Q-44.513 30.515-44.576 30.419Q-44.638 30.323-44.757 30.302Q-44.876 30.280-45.122 30.280L-45.122 29.984L-43.931 29.898L-43.931 30.632Q-43.818 30.417-43.624 30.249Q-43.431 30.081-43.193 29.989Q-42.954 29.898-42.701 29.898Q-41.533 29.898-41.533 30.976L-41.533 32.866Q-41.533 33.034-41.363 33.081Q-41.193 33.128-40.923 33.128L-40.923 33.425L-42.779 33.425L-42.779 33.128Q-42.505 33.128-42.337 33.081Q-42.169 33.034-42.169 32.866L-42.169 30.991Q-42.169 30.609-42.290 30.380Q-42.411 30.152-42.763 30.152Q-43.076 30.152-43.329 30.314Q-43.583 30.476-43.730 30.745Q-43.876 31.015-43.876 31.312L-43.876 32.866Q-43.876 33.034-43.706 33.081Q-43.536 33.128-43.267 33.128L-43.267 33.425M-38.661 33.503Q-39.142 33.503-39.550 33.259Q-39.958 33.015-40.197 32.601Q-40.435 32.187-40.435 31.698Q-40.435 31.206-40.177 30.790Q-39.919 30.374-39.488 30.136Q-39.056 29.898-38.564 29.898Q-37.943 29.898-37.493 30.335L-37.493 28.706Q-37.493 28.491-37.556 28.396Q-37.618 28.300-37.736 28.279Q-37.853 28.257-38.099 28.257L-38.099 27.960L-36.876 27.874L-36.876 32.683Q-36.876 32.894-36.814 32.989Q-36.751 33.085-36.634 33.107Q-36.517 33.128-36.267 33.128L-36.267 33.425L-37.517 33.503L-37.517 33.019Q-37.982 33.503-38.661 33.503M-38.595 33.249Q-38.255 33.249-37.962 33.058Q-37.669 32.866-37.517 32.570L-37.517 30.737Q-37.665 30.464-37.927 30.308Q-38.189 30.152-38.501 30.152Q-39.126 30.152-39.410 30.599Q-39.693 31.046-39.693 31.706Q-39.693 32.351-39.441 32.800Q-39.189 33.249-38.595 33.249",[1301],[1282,2168,2169],{"transform":2126},[1287,2170],{"d":2171,"fill":2051,"stroke":2051,"className":2172,"style":1315},"M-30.536 35.417Q-31.149 34.960-31.551 34.325Q-31.954 33.691-32.149 32.945Q-32.344 32.198-32.344 31.425Q-32.344 30.652-32.149 29.905Q-31.954 29.159-31.551 28.525Q-31.149 27.890-30.536 27.433Q-30.524 27.429-30.516 27.427Q-30.508 27.425-30.497 27.425L-30.419 27.425Q-30.380 27.425-30.354 27.452Q-30.329 27.480-30.329 27.523Q-30.329 27.573-30.360 27.593Q-30.868 28.046-31.190 28.669Q-31.512 29.292-31.653 29.987Q-31.794 30.683-31.794 31.425Q-31.794 32.159-31.655 32.859Q-31.516 33.558-31.192 34.183Q-30.868 34.808-30.360 35.257Q-30.329 35.277-30.329 35.327Q-30.329 35.370-30.354 35.398Q-30.380 35.425-30.419 35.425L-30.497 35.425Q-30.505 35.421-30.514 35.419Q-30.524 35.417-30.536 35.417",[1301],[1282,2174,2175],{"transform":2126},[1287,2176],{"d":2177,"fill":2051,"stroke":2051,"className":2178,"style":1315},"M-29.054 32.945Q-28.839 33.249-28.175 33.249Q-27.745 33.249-27.388 33.048Q-27.031 32.847-27.031 32.448Q-27.031 32.245-27.191 32.122Q-27.351 31.999-27.558 31.960L-28.023 31.874Q-28.339 31.804-28.554 31.597Q-28.769 31.390-28.769 31.081Q-28.769 30.718-28.564 30.446Q-28.359 30.175-28.029 30.036Q-27.699 29.898-27.343 29.898Q-26.956 29.898-26.646 30.066Q-26.335 30.234-26.335 30.585Q-26.335 30.777-26.441 30.917Q-26.546 31.058-26.734 31.058Q-26.843 31.058-26.925 30.986Q-27.007 30.913-27.007 30.800Q-27.007 30.655-26.910 30.546Q-26.812 30.437-26.671 30.417Q-26.761 30.273-26.952 30.212Q-27.144 30.152-27.359 30.152Q-27.691 30.152-27.964 30.323Q-28.238 30.495-28.238 30.808Q-28.238 30.964-28.126 31.058Q-28.015 31.152-27.839 31.195L-27.382 31.280Q-27.007 31.351-26.755 31.583Q-26.503 31.816-26.503 32.179Q-26.503 32.452-26.648 32.720Q-26.792 32.987-27.031 33.167Q-27.507 33.503-28.191 33.503Q-28.468 33.503-28.749 33.431Q-29.031 33.359-29.222 33.185Q-29.413 33.011-29.413 32.730Q-29.413 32.507-29.285 32.343Q-29.156 32.179-28.937 32.179Q-28.792 32.179-28.704 32.261Q-28.617 32.343-28.617 32.480Q-28.617 32.659-28.747 32.802Q-28.878 32.945-29.054 32.945M-25.093 34.831Q-25.093 34.808-25.062 34.761Q-24.769 34.499-24.603 34.132Q-24.437 33.765-24.437 33.378L-24.437 33.320Q-24.566 33.425-24.734 33.425Q-24.925 33.425-25.062 33.292Q-25.199 33.159-25.199 32.960Q-25.199 32.769-25.062 32.636Q-24.925 32.503-24.734 32.503Q-24.433 32.503-24.308 32.773Q-24.183 33.042-24.183 33.378Q-24.183 33.827-24.365 34.241Q-24.546 34.655-24.886 34.952Q-24.910 34.976-24.949 34.976Q-24.995 34.976-25.044 34.931Q-25.093 34.886-25.093 34.831",[1301],[1282,2180,2181],{"transform":2126},[1287,2182],{"d":2183,"fill":2051,"stroke":2051,"className":2184,"style":1315},"M-20.987 33.425L-21.268 33.425L-21.268 28.706Q-21.268 28.491-21.330 28.396Q-21.393 28.300-21.510 28.279Q-21.627 28.257-21.873 28.257L-21.873 27.960L-20.651 27.874L-20.651 30.362Q-20.174 29.898-19.475 29.898Q-18.994 29.898-18.586 30.142Q-18.178 30.386-17.942 30.800Q-17.705 31.214-17.705 31.698Q-17.705 32.073-17.854 32.402Q-18.002 32.730-18.272 32.982Q-18.541 33.234-18.885 33.368Q-19.229 33.503-19.588 33.503Q-19.909 33.503-20.207 33.355Q-20.506 33.206-20.713 32.945L-20.987 33.425M-20.627 30.753L-20.627 32.593Q-20.475 32.890-20.215 33.070Q-19.955 33.249-19.643 33.249Q-19.217 33.249-18.950 33.030Q-18.682 32.812-18.567 32.466Q-18.451 32.120-18.451 31.698Q-18.451 31.050-18.700 30.601Q-18.948 30.152-19.545 30.152Q-19.881 30.152-20.170 30.310Q-20.459 30.468-20.627 30.753",[1301],[1282,2186,2187],{"transform":2126},[1287,2188],{"d":2189,"fill":2051,"stroke":2051,"className":2190,"style":1315},"M-16.942 31.671Q-16.942 31.191-16.709 30.775Q-16.477 30.359-16.067 30.109Q-15.657 29.859-15.180 29.859Q-14.450 29.859-14.051 30.300Q-13.653 30.741-13.653 31.472Q-13.653 31.577-13.746 31.601L-16.196 31.601L-16.196 31.671Q-16.196 32.081-16.075 32.437Q-15.953 32.792-15.682 33.009Q-15.410 33.226-14.981 33.226Q-14.617 33.226-14.321 32.997Q-14.024 32.769-13.922 32.417Q-13.914 32.370-13.828 32.355L-13.746 32.355Q-13.653 32.382-13.653 32.464Q-13.653 32.472-13.660 32.503Q-13.723 32.730-13.862 32.913Q-14 33.097-14.192 33.230Q-14.383 33.362-14.602 33.433Q-14.821 33.503-15.059 33.503Q-15.430 33.503-15.768 33.366Q-16.106 33.230-16.373 32.978Q-16.641 32.726-16.791 32.386Q-16.942 32.046-16.942 31.671M-16.188 31.362L-14.227 31.362Q-14.227 31.058-14.328 30.767Q-14.430 30.476-14.647 30.294Q-14.864 30.112-15.180 30.112Q-15.481 30.112-15.711 30.300Q-15.942 30.487-16.065 30.779Q-16.188 31.070-16.188 31.362M-11.250 33.425L-13.082 33.425L-13.082 33.128Q-12.809 33.128-12.641 33.081Q-12.473 33.034-12.473 32.866L-12.473 28.706Q-12.473 28.491-12.535 28.396Q-12.598 28.300-12.717 28.279Q-12.836 28.257-13.082 28.257L-13.082 27.960L-11.860 27.874L-11.860 32.866Q-11.860 33.034-11.692 33.081Q-11.524 33.128-11.250 33.128L-11.250 33.425M-10.805 31.730Q-10.805 31.226-10.549 30.794Q-10.293 30.362-9.858 30.111Q-9.422 29.859-8.922 29.859Q-8.535 29.859-8.194 30.003Q-7.852 30.148-7.590 30.409Q-7.328 30.671-7.186 31.007Q-7.043 31.343-7.043 31.730Q-7.043 32.222-7.307 32.632Q-7.571 33.042-8 33.273Q-8.430 33.503-8.922 33.503Q-9.414 33.503-9.848 33.271Q-10.282 33.038-10.543 32.630Q-10.805 32.222-10.805 31.730M-8.922 33.226Q-8.465 33.226-8.213 33.003Q-7.961 32.780-7.873 32.429Q-7.785 32.077-7.785 31.632Q-7.785 31.202-7.879 30.864Q-7.973 30.527-8.227 30.320Q-8.481 30.112-8.922 30.112Q-9.571 30.112-9.815 30.529Q-10.059 30.945-10.059 31.632Q-10.059 32.077-9.971 32.429Q-9.883 32.780-9.631 33.003Q-9.379 33.226-8.922 33.226",[1301],[1282,2192,2193],{"transform":2126},[1287,2194],{"d":2195,"fill":2051,"stroke":2051,"className":2196,"style":1315},"M-5.203 33.394L-6.273 30.538Q-6.340 30.359-6.470 30.316Q-6.601 30.273-6.859 30.273L-6.859 29.976L-5.179 29.976L-5.179 30.273Q-5.629 30.273-5.629 30.472Q-5.625 30.487-5.623 30.505Q-5.621 30.523-5.621 30.538L-4.828 32.632L-4.117 30.722Q-4.152 30.628-4.152 30.583Q-4.152 30.538-4.187 30.538Q-4.254 30.359-4.384 30.316Q-4.515 30.273-4.769 30.273L-4.769 29.976L-3.179 29.976L-3.179 30.273Q-3.629 30.273-3.629 30.472Q-3.625 30.491-3.623 30.509Q-3.621 30.527-3.621 30.538L-2.789 32.753L-2.035 30.753Q-2.011 30.695-2.011 30.624Q-2.011 30.464-2.148 30.368Q-2.285 30.273-2.453 30.273L-2.453 29.976L-1.066 29.976L-1.066 30.273Q-1.300 30.273-1.478 30.400Q-1.656 30.527-1.738 30.753L-2.722 33.394Q-2.777 33.503-2.890 33.503L-2.949 33.503Q-3.062 33.503-3.105 33.394L-3.965 31.120L-4.820 33.394Q-4.859 33.503-4.980 33.503L-5.035 33.503Q-5.148 33.503-5.203 33.394",[1301],[1282,2198,2199],{"transform":2126},[1287,2200],{"d":2201,"fill":2051,"stroke":2051,"className":2202,"style":1315},"M-0.247 35.425L-0.329 35.425Q-0.365 35.425-0.390 35.396Q-0.415 35.366-0.415 35.327Q-0.415 35.277-0.384 35.257Q0.003 34.921 0.286 34.472Q0.569 34.023 0.735 33.523Q0.901 33.023 0.975 32.505Q1.050 31.987 1.050 31.425Q1.050 30.855 0.975 30.339Q0.901 29.823 0.735 29.327Q0.569 28.831 0.290 28.384Q0.010 27.937-0.384 27.593Q-0.415 27.573-0.415 27.523Q-0.415 27.484-0.390 27.454Q-0.365 27.425-0.329 27.425L-0.247 27.425Q-0.236 27.425-0.226 27.427Q-0.216 27.429-0.208 27.433Q0.405 27.890 0.807 28.525Q1.210 29.159 1.405 29.905Q1.600 30.652 1.600 31.425Q1.600 32.198 1.405 32.945Q1.210 33.691 0.807 34.325Q0.405 34.960-0.208 35.417Q-0.220 35.417-0.228 35.419Q-0.236 35.421-0.247 35.425",[1301],[1414,2204,2206,2207,2222],{"className":2205},[1417],"At crossing ",[385,2208,2210],{"className":2209},[388],[385,2211,2213],{"className":2212,"ariaHidden":393},[392],[385,2214,2216,2219],{"className":2215},[397],[385,2217],{"className":2218,"style":402},[401],[385,2220,1808],{"className":2221},[406,407]," the two segments swap status order, exposing two new adjacencies to test",[687,2224,2225],{"type":1185},[381,2226,2227,2230,2231,2234,2235,2250,2251],{},[610,2228,2229],{},"Lemma (correctness sketch)."," Every crossing pair is reported. ",[411,2232,2233],{},"Proof idea.","\nAt the moment two segments cross they are equal in ",[385,2236,2238],{"className":2237},[388],[385,2239,2241],{"className":2240,"ariaHidden":393},[392],[385,2242,2244,2247],{"className":2243},[397],[385,2245],{"className":2246,"style":668},[401],[385,2248,673],{"className":2249,"style":672},[406,407],", hence adjacent in the\nstatus immediately before. Adjacency arises only at an event, and we test every\npair made adjacent at every event; so the pair is tested before its crossing is\nreached, scheduled as an event, and reported when the sweep arrives. ",[385,2252,2254],{"className":2253},[388],[385,2255,2257],{"className":2256,"ariaHidden":393},[392],[385,2258,2260,2264],{"className":2259},[397],[385,2261],{"className":2262,"style":2263},[401],"height:0.675em;",[385,2265,2269],{"className":2266},[2267,2268],"enclosing","qed",[385,2270,2273],{"className":2271},[406,2272],"amsrm","□",[381,2275,2276,2277,2280],{},"We keep the implementation at this level: the careful part is degeneracy\n(vertical segments, three segments through a point) and reliable ",[622,2278,2279],{"href":338},"orientation tests",",\nwhich the references treat in full.",[679,2282,2284],{"id":2283},"closest-pair-swept","Closest pair, swept",[381,2286,2287,2288,2291,2292,2307,2308,2347,2348,2351,2352],{},"The ",[622,2289,2290],{"href":46},"Selection lesson"," found the closest pair of ",[385,2293,2295],{"className":2294},[388],[385,2296,2298],{"className":2297,"ariaHidden":393},[392],[385,2299,2301,2304],{"className":2300},[397],[385,2302],{"className":2303,"style":402},[401],[385,2305,408],{"className":2306},[406,407]," points by divide-and-conquer\nin ",[385,2309,2311],{"className":2310},[388],[385,2312,2314],{"className":2313,"ariaHidden":393},[392],[385,2315,2317,2320,2323,2326,2329,2332,2338,2341,2344],{"className":2316},[397],[385,2318],{"className":2319,"style":840},[401],[385,2321,845],{"className":2322,"style":844},[406,407],[385,2324,474],{"className":2325},[466],[385,2327,408],{"className":2328},[406,407],[385,2330],{"className":2331,"style":888},[887],[385,2333,2335],{"className":2334},[877],[385,2336,883],{"className":2337,"style":882},[406,881],[385,2339],{"className":2340,"style":888},[887],[385,2342,408],{"className":2343},[406,407],[385,2345,551],{"className":2346},[547],". A sweep gives the same bound with a different, often simpler,\nmechanism, and it generalizes the ",[724,2349,2350],{},"narrow strip"," trick of that proof into a\nrunning invariant.",[619,2353,2354],{},[622,2355,2359],{"href":2356,"ariaDescribedBy":2357,"dataFootnoteRef":376,"id":2358},"#user-content-fn-erickson-geom",[626],"user-content-fnref-erickson-geom","3",[381,2361,2362,2363,2378,2379,2396,2397,2412,2413,2428,2429,2447,2448,2463],{},"Sort the points by ",[385,2364,2366],{"className":2365},[388],[385,2367,2369],{"className":2368,"ariaHidden":393},[392],[385,2370,2372,2375],{"className":2371},[397],[385,2373],{"className":2374,"style":402},[401],[385,2376,721],{"className":2377},[406,407]," and sweep. Let ",[385,2380,2382],{"className":2381},[388],[385,2383,2385],{"className":2384,"ariaHidden":393},[392],[385,2386,2388,2391],{"className":2387},[397],[385,2389],{"className":2390,"style":971},[401],[385,2392,2395],{"className":2393,"style":2394},[406,407],"margin-right:0.0379em;","δ"," be the smallest distance found so\nfar. Keep the points whose ",[385,2398,2400],{"className":2399},[388],[385,2401,2403],{"className":2402,"ariaHidden":393},[392],[385,2404,2406,2409],{"className":2405},[397],[385,2407],{"className":2408,"style":402},[401],[385,2410,721],{"className":2411},[406,407]," lies within ",[385,2414,2416],{"className":2415},[388],[385,2417,2419],{"className":2418,"ariaHidden":393},[392],[385,2420,2422,2425],{"className":2421},[397],[385,2423],{"className":2424,"style":971},[401],[385,2426,2395],{"className":2427,"style":2394},[406,407]," of the sweep line in a balanced\nset ",[610,2430,2431,2432],{},"ordered by ",[385,2433,2435],{"className":2434},[388],[385,2436,2438],{"className":2437,"ariaHidden":393},[392],[385,2439,2441,2444],{"className":2440},[397],[385,2442],{"className":2443,"style":668},[401],[385,2445,673],{"className":2446,"style":672},[406,407],". When the sweep reaches a new point ",[385,2449,2451],{"className":2450},[388],[385,2452,2454],{"className":2453,"ariaHidden":393},[392],[385,2455,2457,2460],{"className":2456},[397],[385,2458],{"className":2459,"style":668},[401],[385,2461,381],{"className":2462},[406,407],":",[1140,2465,2466,2516],{},[699,2467,2468,2469,2484,2485,2500,2501,1723],{},"Evict from the set every point more than ",[385,2470,2472],{"className":2471},[388],[385,2473,2475],{"className":2474,"ariaHidden":393},[392],[385,2476,2478,2481],{"className":2477},[397],[385,2479],{"className":2480,"style":971},[401],[385,2482,2395],{"className":2483,"style":2394},[406,407]," to the left of ",[385,2486,2488],{"className":2487},[388],[385,2489,2491],{"className":2490,"ariaHidden":393},[392],[385,2492,2494,2497],{"className":2493},[397],[385,2495],{"className":2496,"style":668},[401],[385,2498,381],{"className":2499},[406,407]," in ",[385,2502,2504],{"className":2503},[388],[385,2505,2507],{"className":2506,"ariaHidden":393},[392],[385,2508,2510,2513],{"className":2509},[397],[385,2511],{"className":2512,"style":402},[401],[385,2514,721],{"className":2515},[406,407],[699,2517,2518,2519,2534,2535,2500,2550,2565,2566,2581,2582,2597,2598,1723],{},"Among the survivors, only those within ",[385,2520,2522],{"className":2521},[388],[385,2523,2525],{"className":2524,"ariaHidden":393},[392],[385,2526,2528,2531],{"className":2527},[397],[385,2529],{"className":2530,"style":971},[401],[385,2532,2395],{"className":2533,"style":2394},[406,407]," of ",[385,2536,2538],{"className":2537},[388],[385,2539,2541],{"className":2540,"ariaHidden":393},[392],[385,2542,2544,2547],{"className":2543},[397],[385,2545],{"className":2546,"style":668},[401],[385,2548,381],{"className":2549},[406,407],[385,2551,2553],{"className":2552},[388],[385,2554,2556],{"className":2555,"ariaHidden":393},[392],[385,2557,2559,2562],{"className":2558},[397],[385,2560],{"className":2561,"style":668},[401],[385,2563,673],{"className":2564,"style":672},[406,407]," can beat ",[385,2567,2569],{"className":2568},[388],[385,2570,2572],{"className":2571,"ariaHidden":393},[392],[385,2573,2575,2578],{"className":2574},[397],[385,2576],{"className":2577,"style":971},[401],[385,2579,2395],{"className":2580,"style":2394},[406,407],",\nso query the set for the ",[385,2583,2585],{"className":2584},[388],[385,2586,2588],{"className":2587,"ariaHidden":393},[392],[385,2589,2591,2594],{"className":2590},[397],[385,2592],{"className":2593,"style":668},[401],[385,2595,673],{"className":2596,"style":672},[406,407],"-window ",[385,2599,2601],{"className":2600},[388],[385,2602,2604,2671,2741],{"className":2603,"ariaHidden":393},[392],[385,2605,2607,2611,2615,2618,2661,2664,2668],{"className":2606},[397],[385,2608],{"className":2609,"style":2610},[401],"height:1.0361em;vertical-align:-0.2861em;",[385,2612,2614],{"className":2613},[466],"[",[385,2616],{"className":2617,"style":888},[887],[385,2619,2621,2624],{"className":2620},[406],[385,2622,381],{"className":2623},[406,407],[385,2625,2627],{"className":2626},[582],[385,2628,2630,2652],{"className":2629},[482,483],[385,2631,2633,2649],{"className":2632},[487],[385,2634,2637],{"className":2635,"style":2636},[491],"height:0.1514em;",[385,2638,2640,2643],{"style":2639},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[385,2641],{"className":2642,"style":500},[499],[385,2644,2646],{"className":2645},[504,505,506,507],[385,2647,673],{"className":2648,"style":672},[406,407,507],[385,2650,534],{"className":2651},[533],[385,2653,2655],{"className":2654},[487],[385,2656,2659],{"className":2657,"style":2658},[491],"height:0.2861em;",[385,2660],{},[385,2662],{"className":2663,"style":1070},[887],[385,2665,2667],{"className":2666},[1074],"−",[385,2669],{"className":2670,"style":1070},[887],[385,2672,2674,2678,2681,2686,2689,2692,2732,2735,2738],{"className":2673},[397],[385,2675],{"className":2676,"style":2677},[401],"height:0.9805em;vertical-align:-0.2861em;",[385,2679,2395],{"className":2680,"style":2394},[406,407],[385,2682,2685],{"className":2683},[2684],"mpunct",",",[385,2687],{"className":2688,"style":1650},[887],[385,2690],{"className":2691,"style":888},[887],[385,2693,2695,2698],{"className":2694},[406],[385,2696,381],{"className":2697},[406,407],[385,2699,2701],{"className":2700},[582],[385,2702,2704,2724],{"className":2703},[482,483],[385,2705,2707,2721],{"className":2706},[487],[385,2708,2710],{"className":2709,"style":2636},[491],[385,2711,2712,2715],{"style":2639},[385,2713],{"className":2714,"style":500},[499],[385,2716,2718],{"className":2717},[504,505,506,507],[385,2719,673],{"className":2720,"style":672},[406,407,507],[385,2722,534],{"className":2723},[533],[385,2725,2727],{"className":2726},[487],[385,2728,2730],{"className":2729,"style":2658},[491],[385,2731],{},[385,2733],{"className":2734,"style":1070},[887],[385,2736,1075],{"className":2737},[1074],[385,2739],{"className":2740,"style":1070},[887],[385,2742,2744,2747,2750,2753],{"className":2743},[397],[385,2745],{"className":2746,"style":840},[401],[385,2748,2395],{"className":2749,"style":2394},[406,407],[385,2751],{"className":2752,"style":888},[887],[385,2754,2756],{"className":2755},[547],"]",[687,2758,2759],{"type":689},[381,2760,2761,2789,2790,2828,2829,2844,2845,2869,2870,2885,2886,2901],{},[610,2762,2763,2764,2788],{},"Remark (Why ",[385,2765,2767],{"className":2766},[388],[385,2768,2770],{"className":2769,"ariaHidden":393},[392],[385,2771,2773,2776,2779,2782,2785],{"className":2772},[397],[385,2774],{"className":2775,"style":840},[401],[385,2777,845],{"className":2778,"style":844},[406,407],[385,2780,474],{"className":2781},[466],[385,2783,628],{"className":2784},[406],[385,2786,551],{"className":2787},[547]," comparisons per point)."," The survivors lie in a ",[385,2791,2793],{"className":2792},[388],[385,2794,2796,2816],{"className":2795,"ariaHidden":393},[392],[385,2797,2799,2803,2806,2809,2813],{"className":2798},[397],[385,2800],{"className":2801,"style":2802},[401],"height:0.7778em;vertical-align:-0.0833em;",[385,2804,2395],{"className":2805,"style":2394},[406,407],[385,2807],{"className":2808,"style":1070},[887],[385,2810,2812],{"className":2811},[1074],"×",[385,2814],{"className":2815,"style":1070},[887],[385,2817,2819,2822,2825],{"className":2818},[397],[385,2820],{"className":2821,"style":971},[401],[385,2823,514],{"className":2824},[406],[385,2826,2395],{"className":2827,"style":2394},[406,407]," rectangle to the left of ",[385,2830,2832],{"className":2831},[388],[385,2833,2835],{"className":2834,"ariaHidden":393},[392],[385,2836,2838,2841],{"className":2837},[397],[385,2839],{"className":2840,"style":668},[401],[385,2842,381],{"className":2843},[406,407],". By the packing argument from the\nclosest-pair proof, any such rectangle holds ",[385,2846,2848],{"className":2847},[388],[385,2849,2851],{"className":2850,"ariaHidden":393},[392],[385,2852,2854,2857,2860,2863,2866],{"className":2853},[397],[385,2855],{"className":2856,"style":840},[401],[385,2858,845],{"className":2859,"style":844},[406,407],[385,2861,474],{"className":2862},[466],[385,2864,628],{"className":2865},[406],[385,2867,551],{"className":2868},[547]," points (no two can be closer\nthan ",[385,2871,2873],{"className":2872},[388],[385,2874,2876],{"className":2875,"ariaHidden":393},[392],[385,2877,2879,2882],{"className":2878},[397],[385,2880],{"className":2881,"style":971},[401],[385,2883,2395],{"className":2884,"style":2394},[406,407],"), so the ",[385,2887,2889],{"className":2888},[388],[385,2890,2892],{"className":2891,"ariaHidden":393},[392],[385,2893,2895,2898],{"className":2894},[397],[385,2896],{"className":2897,"style":668},[401],[385,2899,673],{"className":2900,"style":672},[406,407],"-window query returns a constant number of candidates.",[381,2903,2904,2905,2929,2930,2963,2964,2988,2989,3028,3029,3032],{},"Each point triggers one insertion, ",[385,2906,2908],{"className":2907},[388],[385,2909,2911],{"className":2910,"ariaHidden":393},[392],[385,2912,2914,2917,2920,2923,2926],{"className":2913},[397],[385,2915],{"className":2916,"style":840},[401],[385,2918,845],{"className":2919,"style":844},[406,407],[385,2921,474],{"className":2922},[466],[385,2924,628],{"className":2925},[406],[385,2927,551],{"className":2928},[547]," deletions amortized, and an ",[385,2931,2933],{"className":2932},[388],[385,2934,2936],{"className":2935,"ariaHidden":393},[392],[385,2937,2939,2942,2945,2948,2954,2957,2960],{"className":2938},[397],[385,2940],{"className":2941,"style":840},[401],[385,2943,845],{"className":2944,"style":844},[406,407],[385,2946,474],{"className":2947},[466],[385,2949,2951],{"className":2950},[877],[385,2952,883],{"className":2953,"style":882},[406,881],[385,2955],{"className":2956,"style":888},[887],[385,2958,408],{"className":2959},[406,407],[385,2961,551],{"className":2962},[547],"\nrange query returning ",[385,2965,2967],{"className":2966},[388],[385,2968,2970],{"className":2969,"ariaHidden":393},[392],[385,2971,2973,2976,2979,2982,2985],{"className":2972},[397],[385,2974],{"className":2975,"style":840},[401],[385,2977,845],{"className":2978,"style":844},[406,407],[385,2980,474],{"className":2981},[466],[385,2983,628],{"className":2984},[406],[385,2986,551],{"className":2987},[547]," points to test — so ",[385,2990,2992],{"className":2991},[388],[385,2993,2995],{"className":2994,"ariaHidden":393},[392],[385,2996,2998,3001,3004,3007,3010,3013,3019,3022,3025],{"className":2997},[397],[385,2999],{"className":3000,"style":840},[401],[385,3002,845],{"className":3003,"style":844},[406,407],[385,3005,474],{"className":3006},[466],[385,3008,408],{"className":3009},[406,407],[385,3011],{"className":3012,"style":888},[887],[385,3014,3016],{"className":3015},[877],[385,3017,883],{"className":3018,"style":882},[406,881],[385,3020],{"className":3021,"style":888},[887],[385,3023,408],{"className":3024},[406,407],[385,3026,551],{"className":3027},[547]," overall, dominated by\nthe initial sort. The sweep makes the strip ",[411,3030,3031],{},"dynamic",": rather than recomputing a\nfresh strip at each recursion, it slides one along, inserting and evicting at the\nboundary.",[1269,3034,3036,3171],{"className":3035},[1272,1273],[1275,3037,3041],{"xmlns":1277,"width":3038,"height":3039,"viewBox":3040},"260.923","225.975","-75 -75 195.692 169.481",[1282,3042,3043,3047,3050,3053,3088,3091,3094,3101,3106,3119,3122,3125,3130,3137,3140,3143,3150,3153,3156],{"stroke":1284,"style":1285},[1287,3044],{"fill":1381,"stroke":1289,"d":3045,"style":3046},"M37.027 62.338v-113.81H71.17v113.81ZM71.17-51.472","fill-opacity:.08;stroke-opacity:.08",[1287,3048],{"fill":1289,"stroke":1381,"d":3049,"style":1406},"M37.027 25.35v-68.287H71.17V25.35ZM71.17-42.937",[1287,3051],{"fill":1289,"stroke":1381,"d":3052,"style":1383},"M71.17 62.338V-57.163",[1282,3054,3055],{"fill":1381,"stroke":1381},[1282,3056,3057,3064,3070,3076,3082],{"fill":1381,"stroke":1289},[1282,3058,3060],{"transform":3059},"translate(120.403 -126.355)",[1287,3061],{"d":3062,"fill":1381,"stroke":1381,"className":3063,"style":1315},"M-70.813 62.330L-70.813 61.108Q-70.813 61.080-70.781 61.049Q-70.750 61.018-70.727 61.018L-70.621 61.018Q-70.551 61.018-70.535 61.080Q-70.473 61.401-70.334 61.641Q-70.196 61.881-69.963 62.022Q-69.731 62.162-69.422 62.162Q-69.184 62.162-68.975 62.102Q-68.766 62.041-68.629 61.893Q-68.492 61.744-68.492 61.498Q-68.492 61.244-68.703 61.078Q-68.914 60.912-69.184 60.858L-69.805 60.744Q-70.211 60.666-70.512 60.410Q-70.813 60.154-70.813 59.779Q-70.813 59.412-70.612 59.190Q-70.410 58.967-70.086 58.869Q-69.762 58.772-69.422 58.772Q-68.957 58.772-68.660 58.979L-68.438 58.795Q-68.414 58.772-68.383 58.772L-68.332 58.772Q-68.301 58.772-68.274 58.799Q-68.246 58.826-68.246 58.858L-68.246 59.842Q-68.246 59.873-68.272 59.902Q-68.297 59.932-68.332 59.932L-68.438 59.932Q-68.473 59.932-68.500 59.904Q-68.528 59.877-68.528 59.842Q-68.528 59.443-68.780 59.223Q-69.031 59.002-69.430 59.002Q-69.785 59.002-70.069 59.125Q-70.352 59.248-70.352 59.553Q-70.352 59.772-70.151 59.904Q-69.949 60.037-69.703 60.080L-69.078 60.193Q-68.649 60.283-68.340 60.580Q-68.031 60.877-68.031 61.291Q-68.031 61.861-68.430 62.139Q-68.828 62.416-69.422 62.416Q-69.973 62.416-70.324 62.080L-70.621 62.393Q-70.645 62.416-70.680 62.416L-70.727 62.416Q-70.750 62.416-70.781 62.385Q-70.813 62.354-70.813 62.330M-65.918 62.307L-66.989 59.451Q-67.055 59.272-67.186 59.229Q-67.317 59.186-67.574 59.186L-67.574 58.889L-65.895 58.889L-65.895 59.186Q-66.344 59.186-66.344 59.385Q-66.340 59.401-66.338 59.418Q-66.336 59.436-66.336 59.451L-65.543 61.545L-64.832 59.635Q-64.867 59.541-64.867 59.496Q-64.867 59.451-64.903 59.451Q-64.969 59.272-65.100 59.229Q-65.231 59.186-65.485 59.186L-65.485 58.889L-63.895 58.889L-63.895 59.186Q-64.344 59.186-64.344 59.385Q-64.340 59.404-64.338 59.422Q-64.336 59.440-64.336 59.451L-63.504 61.666L-62.750 59.666Q-62.727 59.608-62.727 59.537Q-62.727 59.377-62.864 59.281Q-63 59.186-63.168 59.186L-63.168 58.889L-61.781 58.889L-61.781 59.186Q-62.016 59.186-62.194 59.313Q-62.371 59.440-62.453 59.666L-63.438 62.307Q-63.492 62.416-63.606 62.416L-63.664 62.416Q-63.778 62.416-63.821 62.307L-64.680 60.033L-65.535 62.307Q-65.574 62.416-65.696 62.416L-65.750 62.416Q-65.864 62.416-65.918 62.307",[1301],[1282,3065,3066],{"transform":3059},[1287,3067],{"d":3068,"fill":1381,"stroke":1381,"className":3069,"style":1315},"M-61.600 60.584Q-61.600 60.104-61.367 59.688Q-61.135 59.272-60.725 59.022Q-60.315 58.772-59.838 58.772Q-59.108 58.772-58.709 59.213Q-58.311 59.654-58.311 60.385Q-58.311 60.490-58.404 60.514L-60.854 60.514L-60.854 60.584Q-60.854 60.994-60.733 61.350Q-60.611 61.705-60.340 61.922Q-60.068 62.139-59.639 62.139Q-59.276 62.139-58.979 61.910Q-58.682 61.682-58.580 61.330Q-58.572 61.283-58.486 61.268L-58.404 61.268Q-58.311 61.295-58.311 61.377Q-58.311 61.385-58.318 61.416Q-58.381 61.643-58.520 61.826Q-58.658 62.010-58.850 62.143Q-59.041 62.276-59.260 62.346Q-59.479 62.416-59.717 62.416Q-60.088 62.416-60.426 62.279Q-60.764 62.143-61.031 61.891Q-61.299 61.639-61.449 61.299Q-61.600 60.959-61.600 60.584M-60.846 60.276L-58.885 60.276Q-58.885 59.971-58.986 59.680Q-59.088 59.389-59.305 59.207Q-59.522 59.026-59.838 59.026Q-60.139 59.026-60.369 59.213Q-60.600 59.401-60.723 59.692Q-60.846 59.983-60.846 60.276M-57.822 60.584Q-57.822 60.104-57.590 59.688Q-57.358 59.272-56.947 59.022Q-56.537 58.772-56.061 58.772Q-55.330 58.772-54.932 59.213Q-54.533 59.654-54.533 60.385Q-54.533 60.490-54.627 60.514L-57.076 60.514L-57.076 60.584Q-57.076 60.994-56.955 61.350Q-56.834 61.705-56.563 61.922Q-56.291 62.139-55.861 62.139Q-55.498 62.139-55.201 61.910Q-54.904 61.682-54.803 61.330Q-54.795 61.283-54.709 61.268L-54.627 61.268Q-54.533 61.295-54.533 61.377Q-54.533 61.385-54.541 61.416Q-54.604 61.643-54.742 61.826Q-54.881 62.010-55.072 62.143Q-55.264 62.276-55.483 62.346Q-55.701 62.416-55.940 62.416Q-56.311 62.416-56.649 62.279Q-56.986 62.143-57.254 61.891Q-57.522 61.639-57.672 61.299Q-57.822 60.959-57.822 60.584M-57.068 60.276L-55.108 60.276Q-55.108 59.971-55.209 59.680Q-55.311 59.389-55.527 59.207Q-55.744 59.026-56.061 59.026Q-56.361 59.026-56.592 59.213Q-56.822 59.401-56.945 59.692Q-57.068 59.983-57.068 60.276M-52.162 63.889L-54.018 63.889L-54.018 63.596Q-53.748 63.596-53.580 63.551Q-53.412 63.506-53.412 63.330L-53.412 59.506Q-53.412 59.299-53.568 59.246Q-53.725 59.193-54.018 59.193L-54.018 58.897L-52.795 58.811L-52.795 59.276Q-52.565 59.053-52.250 58.932Q-51.936 58.811-51.596 58.811Q-51.123 58.811-50.719 59.057Q-50.315 59.303-50.082 59.719Q-49.850 60.135-49.850 60.611Q-49.850 60.986-49.998 61.315Q-50.147 61.643-50.416 61.895Q-50.686 62.147-51.029 62.281Q-51.373 62.416-51.733 62.416Q-52.022 62.416-52.293 62.295Q-52.565 62.174-52.772 61.963L-52.772 63.330Q-52.772 63.506-52.604 63.551Q-52.436 63.596-52.162 63.596L-52.162 63.889M-52.772 59.674L-52.772 61.514Q-52.619 61.803-52.358 61.983Q-52.096 62.162-51.787 62.162Q-51.502 62.162-51.279 62.024Q-51.057 61.885-50.904 61.654Q-50.752 61.424-50.674 61.152Q-50.596 60.881-50.596 60.611Q-50.596 60.279-50.721 59.922Q-50.846 59.565-51.094 59.328Q-51.342 59.092-51.690 59.092Q-52.014 59.092-52.309 59.248Q-52.604 59.404-52.772 59.674",[1301],[1282,3071,3072],{"transform":3059},[1287,3073],{"d":3074,"fill":1381,"stroke":1381,"className":3075,"style":1315},"M-46.391 61.506Q-46.391 61.022-45.989 60.727Q-45.586 60.432-45.036 60.313Q-44.485 60.193-43.993 60.193L-43.993 59.904Q-43.993 59.678-44.108 59.471Q-44.223 59.264-44.420 59.145Q-44.618 59.026-44.848 59.026Q-45.274 59.026-45.559 59.131Q-45.489 59.158-45.442 59.213Q-45.395 59.268-45.370 59.338Q-45.344 59.408-45.344 59.483Q-45.344 59.588-45.395 59.680Q-45.446 59.772-45.538 59.822Q-45.629 59.873-45.735 59.873Q-45.840 59.873-45.932 59.822Q-46.024 59.772-46.075 59.680Q-46.125 59.588-46.125 59.483Q-46.125 59.065-45.737 58.918Q-45.348 58.772-44.848 58.772Q-44.516 58.772-44.163 58.902Q-43.809 59.033-43.581 59.287Q-43.352 59.541-43.352 59.889L-43.352 61.690Q-43.352 61.822-43.280 61.932Q-43.207 62.041-43.079 62.041Q-42.954 62.041-42.885 61.936Q-42.817 61.830-42.817 61.690L-42.817 61.178L-42.536 61.178L-42.536 61.690Q-42.536 61.893-42.653 62.051Q-42.770 62.209-42.952 62.293Q-43.133 62.377-43.336 62.377Q-43.567 62.377-43.719 62.205Q-43.872 62.033-43.903 61.803Q-44.063 62.084-44.372 62.250Q-44.680 62.416-45.032 62.416Q-45.543 62.416-45.967 62.193Q-46.391 61.971-46.391 61.506M-45.704 61.506Q-45.704 61.791-45.477 61.977Q-45.250 62.162-44.957 62.162Q-44.711 62.162-44.487 62.045Q-44.262 61.928-44.127 61.725Q-43.993 61.522-43.993 61.268L-43.993 60.436Q-44.258 60.436-44.543 60.490Q-44.829 60.545-45.100 60.674Q-45.372 60.803-45.538 61.010Q-45.704 61.217-45.704 61.506M-41.618 61.377L-41.618 59.186L-42.321 59.186L-42.321 58.932Q-41.965 58.932-41.723 58.699Q-41.481 58.467-41.370 58.119Q-41.258 57.772-41.258 57.416L-40.977 57.416L-40.977 58.889L-39.801 58.889L-39.801 59.186L-40.977 59.186L-40.977 61.361Q-40.977 61.682-40.858 61.910Q-40.739 62.139-40.457 62.139Q-40.278 62.139-40.161 62.016Q-40.043 61.893-39.991 61.713Q-39.938 61.533-39.938 61.361L-39.938 60.889L-39.657 60.889L-39.657 61.377Q-39.657 61.631-39.762 61.871Q-39.868 62.111-40.065 62.264Q-40.262 62.416-40.520 62.416Q-40.836 62.416-41.088 62.293Q-41.340 62.170-41.479 61.936Q-41.618 61.701-41.618 61.377",[1301],[1282,3077,3078],{"transform":3059},[1287,3079],{"d":3080,"fill":1381,"stroke":1381,"className":3081,"style":1315},"M-34.850 63.889L-36.451 63.889Q-36.486 63.889-36.520 63.848Q-36.553 63.807-36.553 63.772L-36.522 63.666Q-36.490 63.604-36.436 63.596Q-36.244 63.596-36.160 63.580Q-36.076 63.565-36.024 63.498Q-35.971 63.432-35.932 63.291L-35.041 59.721Q-35.002 59.565-35.002 59.428Q-35.002 59.279-35.055 59.172Q-35.108 59.065-35.240 59.065Q-35.420 59.065-35.539 59.234Q-35.658 59.404-35.715 59.590Q-35.772 59.776-35.842 60.065Q-35.854 60.139-35.924 60.139L-36.026 60.139Q-36.061 60.139-36.088 60.104Q-36.115 60.068-36.115 60.041L-36.115 60.010Q-36.029 59.678-35.936 59.436Q-35.842 59.193-35.666 59.002Q-35.490 58.811-35.225 58.811Q-34.943 58.811-34.713 58.955Q-34.483 59.100-34.416 59.354Q-33.897 58.811-33.338 58.811Q-32.803 58.811-32.483 59.195Q-32.162 59.580-32.162 60.123Q-32.162 60.647-32.443 61.186Q-32.725 61.725-33.192 62.070Q-33.658 62.416-34.193 62.416Q-34.432 62.416-34.633 62.299Q-34.834 62.182-34.963 61.971L-35.307 63.346Q-35.318 63.385-35.338 63.506Q-35.338 63.596-34.834 63.596Q-34.729 63.627-34.729 63.721L-34.764 63.826Q-34.795 63.881-34.850 63.889M-34.408 59.772L-34.842 61.498Q-34.783 61.772-34.613 61.967Q-34.443 62.162-34.178 62.162Q-33.842 62.162-33.563 61.871Q-33.283 61.580-33.147 61.225Q-33.022 60.932-32.920 60.498Q-32.818 60.065-32.818 59.787Q-32.818 59.502-32.951 59.283Q-33.084 59.065-33.354 59.065Q-33.565 59.065-33.760 59.166Q-33.955 59.268-34.115 59.424Q-34.276 59.580-34.408 59.772",[1301],[1282,3083,3084],{"transform":3059},[1287,3085],{"d":3086,"fill":1381,"stroke":1381,"className":3087,"style":1322},"M-31.327 63.092Q-31.198 63.183-30.990 63.183Q-30.788 63.183-30.634 63.023Q-30.480 62.863-30.427 62.661L-30.163 61.604Q-30.114 61.369-30.108 61.273Q-30.108 61.103-30.213 61.006Q-30.319 60.909-30.486 60.909Q-30.688 60.909-30.864 61.012Q-31.039 61.114-31.164 61.281Q-31.288 61.448-31.338 61.645Q-31.359 61.683-31.412 61.700L-31.508 61.700Q-31.579 61.680-31.579 61.615Q-31.579 61.609-31.573 61.580Q-31.511 61.343-31.346 61.138Q-31.180 60.933-30.950 60.813Q-30.720 60.692-30.474 60.692Q-30.319 60.692-30.174 60.736Q-30.029 60.780-29.910 60.868Q-29.791 60.956-29.712 61.094Q-29.598 60.918-29.415 60.805Q-29.232 60.692-29.036 60.692Q-28.874 60.692-28.718 60.742Q-28.561 60.792-28.458 60.902Q-28.356 61.012-28.356 61.179Q-28.356 61.343-28.460 61.462Q-28.564 61.580-28.722 61.580Q-28.828 61.580-28.901 61.511Q-28.974 61.442-28.974 61.346Q-28.974 61.226-28.899 61.128Q-28.825 61.029-28.710 60.997Q-28.833 60.909-29.041 60.909Q-29.244 60.909-29.399 61.066Q-29.554 61.223-29.604 61.431L-29.868 62.485Q-29.923 62.673-29.923 62.817Q-29.923 62.984-29.819 63.083Q-29.715 63.183-29.545 63.183Q-29.355 63.183-29.175 63.080Q-28.995 62.978-28.869 62.809Q-28.743 62.641-28.693 62.444Q-28.672 62.412-28.628 62.389L-28.532 62.389Q-28.453 62.415-28.453 62.474Q-28.453 62.480-28.458 62.509Q-28.520 62.746-28.685 62.951Q-28.851 63.156-29.081 63.276Q-29.311 63.397-29.557 63.397Q-29.794 63.397-30.001 63.294Q-30.207 63.192-30.319 62.995Q-30.430 63.168-30.613 63.282Q-30.796 63.397-30.998 63.397Q-31.163 63.397-31.316 63.347Q-31.470 63.297-31.573 63.187Q-31.675 63.077-31.675 62.913Q-31.675 62.746-31.573 62.628Q-31.470 62.509-31.309 62.509Q-31.206 62.509-31.135 62.575Q-31.063 62.641-31.063 62.743Q-31.063 62.866-31.138 62.964Q-31.212 63.063-31.327 63.092",[1301],[1287,3089],{"fill":1289,"d":3090},"M-65.403 62.338h168.716",[1287,3092],{"stroke":1289,"d":3093},"m105.313 62.338-3.2-1.6 1.2 1.6-1.2 1.6",[1282,3095,3097],{"transform":3096},"translate(179.94 1.937)",[1287,3098],{"d":3099,"fill":1284,"stroke":1284,"className":3100,"style":1302},"M-70.365 62.048Q-70.189 62.175-69.916 62.175Q-69.626 62.175-69.413 61.921Q-69.200 61.666-69.121 61.349L-68.717 59.736Q-68.629 59.359-68.629 59.170Q-68.629 58.945-68.756 58.783Q-68.884 58.620-69.103 58.620Q-69.521 58.620-69.853 58.970Q-70.184 59.319-70.303 59.772Q-70.321 59.855-70.391 59.855L-70.501 59.855Q-70.589 59.855-70.589 59.736Q-70.457 59.196-70.035 58.778Q-69.613 58.361-69.086 58.361Q-68.752 58.361-68.477 58.532Q-68.202 58.704-68.088 58.998Q-67.930 58.726-67.684 58.543Q-67.438 58.361-67.152 58.361Q-66.814 58.361-66.541 58.528Q-66.269 58.695-66.269 59.016Q-66.269 59.244-66.412 59.413Q-66.554 59.583-66.792 59.583Q-66.932 59.583-67.038 59.490Q-67.143 59.398-67.143 59.253Q-67.143 59.068-67.020 58.926Q-66.897 58.783-66.713 58.748Q-66.893 58.620-67.170 58.620Q-67.460 58.620-67.671 58.877Q-67.882 59.134-67.961 59.451L-68.365 61.059Q-68.457 61.420-68.457 61.617Q-68.457 61.850-68.328 62.013Q-68.198 62.175-67.969 62.175Q-67.684 62.175-67.436 62.006Q-67.187 61.837-67.014 61.565Q-66.840 61.292-66.774 61.024Q-66.765 60.993-66.741 60.969Q-66.717 60.945-66.682 60.945L-66.576 60.945Q-66.537 60.945-66.511 60.982Q-66.484 61.020-66.484 61.059Q-66.572 61.406-66.792 61.725Q-67.011 62.044-67.328 62.241Q-67.644 62.439-67.987 62.439Q-68.325 62.439-68.600 62.270Q-68.875 62.101-68.998 61.797Q-69.147 62.066-69.396 62.252Q-69.644 62.439-69.925 62.439Q-70.268 62.439-70.542 62.272Q-70.817 62.105-70.817 61.780Q-70.817 61.556-70.668 61.384Q-70.518 61.213-70.285 61.213Q-70.140 61.213-70.037 61.305Q-69.934 61.398-69.934 61.547Q-69.934 61.723-70.057 61.870Q-70.180 62.017-70.365 62.048",[1301],[1282,3102,3103],{"fill":1381},[1287,3104],{"stroke":1289,"d":3105},"M73.15-8.793a1.98 1.98 0 1 0-3.96 0 1.98 1.98 0 0 0 3.96 0m-1.98 0",[1282,3107,3109,3112],{"fill":3108},"var(--tk-bg)",[1287,3110],{"stroke":1289,"d":3111},"M73.55-4.981h6.643v-7.625H73.55Z",[1282,3113,3115],{"transform":3114},"translate(145.644 -70.07)",[1287,3116],{"d":3117,"fill":1284,"stroke":1284,"className":3118,"style":1302},"M-69.538 64.083L-71.283 64.083Q-71.318 64.083-71.351 64.045Q-71.384 64.008-71.384 63.977Q-71.384 63.907-71.351 63.839Q-71.318 63.771-71.257 63.771Q-70.962 63.771-70.857 63.720Q-70.751 63.670-70.690 63.437L-69.679 59.411Q-69.679 59.372-69.653 59.231Q-69.626 59.090-69.626 59.016Q-69.626 58.620-69.890 58.620Q-70.176 58.620-70.310 58.943Q-70.444 59.266-70.562 59.772Q-70.580 59.855-70.655 59.855L-70.760 59.855Q-70.808 59.855-70.830 59.816Q-70.852 59.776-70.852 59.736Q-70.690 59.117-70.490 58.739Q-70.290 58.361-69.868 58.361Q-69.556 58.361-69.316 58.528Q-69.077 58.695-69.007 58.989Q-68.427 58.361-67.820 58.361Q-67.425 58.361-67.139 58.565Q-66.853 58.770-66.706 59.104Q-66.559 59.438-66.559 59.829Q-66.559 60.255-66.732 60.719Q-66.906 61.182-67.214 61.573Q-67.521 61.964-67.934 62.202Q-68.347 62.439-68.791 62.439Q-69.059 62.439-69.275 62.298Q-69.490 62.158-69.626 61.916L-70.022 63.498Q-70.031 63.551-70.039 63.593Q-70.048 63.634-70.048 63.661Q-70.048 63.771-69.472 63.771Q-69.428 63.771-69.402 63.801Q-69.376 63.832-69.376 63.885Q-69.376 64.083-69.538 64.083M-68.774 62.175Q-68.405 62.175-68.101 61.852Q-67.798 61.529-67.640 61.134Q-67.495 60.778-67.374 60.270Q-67.253 59.763-67.253 59.442Q-67.253 59.112-67.396 58.866Q-67.539 58.620-67.838 58.620Q-68.435 58.620-69.007 59.420Q-69.007 59.451-69.015 59.460L-69.503 61.411Q-69.437 61.732-69.255 61.953Q-69.073 62.175-68.774 62.175",[1301],[1287,3120],{"stroke":1289,"d":3121},"M53.233 5.433a1.98 1.98 0 1 0-3.96 0 1.98 1.98 0 0 0 3.96 0M44.697-28.71a1.98 1.98 0 1 0-3.96 0 1.98 1.98 0 0 0 3.96 0m-1.98 0",[1287,3123],{"fill":1289,"d":3124,"style":2031},"M69.396-7.526 53.026 4.166M69.384-10.044 44.503-27.46",[1282,3126,3127],{"fill":1991},[1287,3128],{"stroke":1289,"d":3129},"M-26.435-8.793a1.98 1.98 0 1 0-3.96 0 1.98 1.98 0 0 0 3.96 0m-1.98 0",[1282,3131,3133],{"transform":3132},"translate(28.415 -59.169)",[1287,3134],{"d":3135,"fill":1284,"stroke":1284,"className":3136,"style":1302},"M-68.782 62.439Q-69.341 62.439-69.813 62.156Q-70.285 61.872-70.560 61.395Q-70.835 60.919-70.835 60.365Q-70.835 59.969-70.692 59.594Q-70.549 59.218-70.292 58.930Q-70.035 58.642-69.677 58.473Q-69.319 58.304-68.914 58.304Q-68.369 58.304-67.998 58.541Q-67.627 58.778-67.440 59.196Q-67.253 59.613-67.253 60.150Q-67.253 60.202-67.277 60.240Q-67.302 60.277-67.350 60.277L-70.022 60.277L-70.022 60.356Q-70.022 61.103-69.710 61.626Q-69.398 62.149-68.699 62.149Q-68.295 62.149-67.974 61.892Q-67.653 61.635-67.530 61.231Q-67.512 61.151-67.429 61.151L-67.350 61.151Q-67.310 61.151-67.282 61.182Q-67.253 61.213-67.253 61.257L-67.253 61.292Q-67.359 61.635-67.581 61.894Q-67.802 62.153-68.117 62.296Q-68.431 62.439-68.782 62.439M-70.013 60.026L-67.899 60.026Q-67.899 59.758-67.952 59.512Q-68.005 59.266-68.125 59.044Q-68.246 58.822-68.444 58.695Q-68.642 58.567-68.914 58.567Q-69.257 58.567-69.510 58.792Q-69.762 59.016-69.888 59.354Q-70.013 59.692-70.013 60.026M-64.748 62.320L-66.080 59.073Q-66.168 58.875-66.333 58.825Q-66.497 58.774-66.801 58.774L-66.801 58.458L-64.876 58.458L-64.876 58.774Q-65.368 58.774-65.368 58.989Q-65.368 59.011-65.350 59.073L-64.335 61.547L-63.426 59.323Q-63.390 59.240-63.390 59.143Q-63.390 58.972-63.513 58.873Q-63.636 58.774-63.803 58.774L-63.803 58.458L-62.292 58.458L-62.292 58.774Q-62.577 58.774-62.791 58.917Q-63.004 59.060-63.109 59.323L-64.344 62.320Q-64.388 62.439-64.515 62.439L-64.577 62.439Q-64.704 62.439-64.748 62.320M-59.809 62.338L-61.795 62.338L-61.795 62.022Q-61.488 62.022-61.296 61.969Q-61.105 61.916-61.105 61.727L-61.105 59.279Q-61.105 59.033-61.171 58.928Q-61.237 58.822-61.362 58.798Q-61.488 58.774-61.760 58.774L-61.760 58.458L-60.428 58.361L-60.428 61.727Q-60.428 61.921-60.264 61.971Q-60.099 62.022-59.809 62.022L-59.809 62.338M-61.408 56.814Q-61.408 56.608-61.259 56.458Q-61.110 56.309-60.907 56.309Q-60.776 56.309-60.659 56.379Q-60.543 56.449-60.472 56.566Q-60.402 56.682-60.402 56.814Q-60.402 57.016-60.552 57.166Q-60.701 57.315-60.907 57.315Q-61.110 57.315-61.259 57.166Q-61.408 57.016-61.408 56.814M-57.225 62.439Q-57.774 62.439-58.233 62.160Q-58.693 61.881-58.961 61.411Q-59.229 60.941-59.229 60.396Q-59.229 59.983-59.079 59.605Q-58.930 59.227-58.655 58.932Q-58.381 58.638-58.011 58.471Q-57.642 58.304-57.225 58.304Q-56.891 58.304-56.570 58.370Q-56.249 58.436-56.021 58.622Q-55.792 58.809-55.792 59.134Q-55.792 59.310-55.920 59.438Q-56.047 59.565-56.223 59.565Q-56.407 59.565-56.537 59.440Q-56.667 59.315-56.667 59.134Q-56.667 58.998-56.592 58.886Q-56.517 58.774-56.386 58.721Q-56.693 58.594-57.225 58.594Q-57.660 58.594-57.928 58.871Q-58.196 59.148-58.308 59.563Q-58.420 59.978-58.420 60.396Q-58.420 60.826-58.282 61.228Q-58.143 61.630-57.849 61.890Q-57.554 62.149-57.115 62.149Q-56.693 62.149-56.390 61.899Q-56.087 61.648-55.981 61.239Q-55.972 61.209-55.948 61.184Q-55.924 61.160-55.893 61.160L-55.783 61.160Q-55.696 61.160-55.696 61.275Q-55.841 61.811-56.254 62.125Q-56.667 62.439-57.225 62.439M-54.496 61.266L-54.496 58.774L-55.261 58.774L-55.261 58.515Q-54.856 58.515-54.590 58.249Q-54.324 57.983-54.204 57.583Q-54.083 57.183-54.083 56.801L-53.793 56.801L-53.793 58.458L-52.505 58.458L-52.505 58.774L-53.793 58.774L-53.793 61.231Q-53.793 61.600-53.667 61.874Q-53.542 62.149-53.217 62.149Q-52.918 62.149-52.780 61.855Q-52.641 61.560-52.641 61.231L-52.641 60.708L-52.356 60.708L-52.356 61.266Q-52.356 61.543-52.466 61.815Q-52.575 62.088-52.789 62.263Q-53.002 62.439-53.283 62.439Q-53.643 62.439-53.916 62.301Q-54.188 62.162-54.342 61.899Q-54.496 61.635-54.496 61.266M-49.530 62.439Q-50.088 62.439-50.561 62.156Q-51.033 61.872-51.308 61.395Q-51.582 60.919-51.582 60.365Q-51.582 59.969-51.439 59.594Q-51.297 59.218-51.040 58.930Q-50.782 58.642-50.424 58.473Q-50.066 58.304-49.662 58.304Q-49.117 58.304-48.746 58.541Q-48.374 58.778-48.188 59.196Q-48.001 59.613-48.001 60.150Q-48.001 60.202-48.025 60.240Q-48.049 60.277-48.097 60.277L-50.769 60.277L-50.769 60.356Q-50.769 61.103-50.457 61.626Q-50.145 62.149-49.447 62.149Q-49.042 62.149-48.721 61.892Q-48.401 61.635-48.278 61.231Q-48.260 61.151-48.177 61.151L-48.097 61.151Q-48.058 61.151-48.029 61.182Q-48.001 61.213-48.001 61.257L-48.001 61.292Q-48.106 61.635-48.328 61.894Q-48.550 62.153-48.864 62.296Q-49.178 62.439-49.530 62.439M-50.761 60.026L-48.647 60.026Q-48.647 59.758-48.699 59.512Q-48.752 59.266-48.873 59.044Q-48.994 58.822-49.192 58.695Q-49.389 58.567-49.662 58.567Q-50.005 58.567-50.257 58.792Q-50.510 59.016-50.635 59.354Q-50.761 59.692-50.761 60.026M-45.478 62.439Q-46.023 62.439-46.467 62.156Q-46.911 61.872-47.166 61.400Q-47.421 60.927-47.421 60.396Q-47.421 59.842-47.144 59.376Q-46.867 58.910-46.395 58.636Q-45.922 58.361-45.377 58.361Q-45.043 58.361-44.740 58.493Q-44.437 58.625-44.217 58.862L-44.217 57.012Q-44.217 56.770-44.287 56.662Q-44.358 56.555-44.492 56.531Q-44.626 56.506-44.911 56.506L-44.911 56.190L-43.545 56.093L-43.545 61.521Q-43.545 61.758-43.474 61.866Q-43.404 61.973-43.268 61.997Q-43.132 62.022-42.850 62.022L-42.850 62.338L-44.243 62.439L-44.243 61.890Q-44.494 62.153-44.813 62.296Q-45.131 62.439-45.478 62.439M-45.417 62.175Q-45.048 62.175-44.738 61.964Q-44.428 61.754-44.243 61.411L-44.243 59.279Q-44.415 58.976-44.696 58.798Q-44.977 58.620-45.316 58.620Q-46.006 58.620-46.309 59.141Q-46.612 59.662-46.612 60.404Q-46.612 61.125-46.342 61.650Q-46.072 62.175-45.417 62.175",[1301],[1287,3138],{"fill":1289,"d":3139},"M39.027 75.142H69.17",[1287,3141],{"stroke":1289,"d":3142},"m37.027 75.142 3.2 1.6-1.2-1.6 1.2-1.6M71.17 75.142l-3.2-1.6 1.2 1.6-1.2 1.6",[1282,3144,3146],{"transform":3145},"translate(123.161 25.54)",[1287,3147],{"d":3148,"fill":1284,"stroke":1284,"className":3149,"style":1315},"M-70.758 61.057Q-70.758 60.561-70.508 60.098Q-70.258 59.635-69.840 59.309Q-69.422 58.983-68.942 58.865Q-69.086 58.611-69.196 58.389Q-69.305 58.166-69.379 57.928Q-69.453 57.690-69.453 57.467Q-69.453 57.092-69.198 56.856Q-68.942 56.619-68.567 56.619Q-68.391 56.619-67.942 56.699Q-67.492 56.779-67.422 56.834Q-67.317 56.912-67.317 57.033Q-67.317 57.162-67.424 57.274Q-67.531 57.385-67.668 57.385Q-67.774 57.385-67.856 57.342Q-67.938 57.299-68.127 57.180Q-68.317 57.061-68.453 57.004Q-68.590 56.947-68.742 56.947Q-68.895 56.947-69.026 57.043Q-69.156 57.139-69.156 57.291Q-69.156 57.420-69.059 57.613Q-68.961 57.807-68.799 58.026Q-68.637 58.244-68.479 58.432Q-68.321 58.619-68.239 58.721Q-67.711 59.342-67.711 60.100Q-67.711 60.592-67.908 61.145Q-68.106 61.697-68.481 62.074Q-68.856 62.451-69.360 62.451Q-69.750 62.451-70.073 62.272Q-70.395 62.092-70.576 61.772Q-70.758 61.451-70.758 61.057M-69.352 62.193Q-69.035 62.193-68.811 61.891Q-68.586 61.588-68.473 61.174Q-68.360 60.760-68.360 60.459Q-68.360 59.897-68.789 59.139Q-68.793 59.131-68.795 59.123Q-68.797 59.115-68.805 59.108Q-69.219 59.217-69.531 59.567Q-69.844 59.916-70.004 60.377Q-70.164 60.838-70.164 61.283Q-70.164 61.678-69.948 61.936Q-69.731 62.193-69.352 62.193",[1301],[1287,3151],{"fill":1289,"d":3152},"M78.283 23.35v-64.287",[1287,3154],{"stroke":1289,"d":3155},"m78.283 25.35 1.6-3.2-1.6 1.2-1.6-1.2M78.283-42.937l-1.6 3.2 1.6-1.2 1.6 1.2",[1282,3157,3158,3165],{"stroke":1289,"fontSize":1389},[1282,3159,3161],{"transform":3160},"translate(153.757 -68.354)",[1287,3162],{"d":3163,"fill":1284,"stroke":1284,"className":3164,"style":1315},"M-67.508 62.338L-70.668 62.338L-70.668 62.131Q-70.668 62.104-70.645 62.072L-69.293 60.674Q-68.914 60.287-68.666 59.998Q-68.418 59.709-68.244 59.352Q-68.071 58.994-68.071 58.604Q-68.071 58.256-68.203 57.963Q-68.336 57.670-68.590 57.492Q-68.844 57.315-69.199 57.315Q-69.559 57.315-69.850 57.510Q-70.141 57.705-70.285 58.033L-70.231 58.033Q-70.047 58.033-69.922 58.154Q-69.797 58.276-69.797 58.467Q-69.797 58.647-69.922 58.776Q-70.047 58.904-70.231 58.904Q-70.410 58.904-70.539 58.776Q-70.668 58.647-70.668 58.467Q-70.668 58.065-70.448 57.729Q-70.227 57.393-69.862 57.205Q-69.496 57.018-69.094 57.018Q-68.614 57.018-68.198 57.205Q-67.781 57.393-67.530 57.754Q-67.278 58.115-67.278 58.604Q-67.278 58.963-67.432 59.266Q-67.586 59.568-67.838 59.828Q-68.090 60.088-68.440 60.373Q-68.789 60.658-68.957 60.811L-69.887 61.651L-69.172 61.651Q-67.797 61.651-67.758 61.611Q-67.688 61.533-67.645 61.348Q-67.602 61.162-67.559 60.873L-67.278 60.873",[1301],[1282,3166,3167],{"transform":3160},[1287,3168],{"d":3169,"fill":1284,"stroke":1284,"className":3170,"style":1315},"M-66.508 61.057Q-66.508 60.561-66.258 60.098Q-66.008 59.635-65.590 59.309Q-65.172 58.983-64.692 58.865Q-64.836 58.611-64.946 58.389Q-65.055 58.166-65.129 57.928Q-65.203 57.690-65.203 57.467Q-65.203 57.092-64.948 56.856Q-64.692 56.619-64.317 56.619Q-64.141 56.619-63.692 56.699Q-63.242 56.779-63.172 56.834Q-63.067 56.912-63.067 57.033Q-63.067 57.162-63.174 57.274Q-63.281 57.385-63.418 57.385Q-63.524 57.385-63.606 57.342Q-63.688 57.299-63.877 57.180Q-64.067 57.061-64.203 57.004Q-64.340 56.947-64.492 56.947Q-64.645 56.947-64.776 57.043Q-64.906 57.139-64.906 57.291Q-64.906 57.420-64.809 57.613Q-64.711 57.807-64.549 58.026Q-64.387 58.244-64.229 58.432Q-64.071 58.619-63.989 58.721Q-63.461 59.342-63.461 60.100Q-63.461 60.592-63.658 61.145Q-63.856 61.697-64.231 62.074Q-64.606 62.451-65.110 62.451Q-65.500 62.451-65.823 62.272Q-66.145 62.092-66.326 61.772Q-66.508 61.451-66.508 61.057M-65.102 62.193Q-64.785 62.193-64.561 61.891Q-64.336 61.588-64.223 61.174Q-64.110 60.760-64.110 60.459Q-64.110 59.897-64.539 59.139Q-64.543 59.131-64.545 59.123Q-64.547 59.115-64.555 59.108Q-64.969 59.217-65.281 59.567Q-65.594 59.916-65.754 60.377Q-65.914 60.838-65.914 61.283Q-65.914 61.678-65.698 61.936Q-65.481 62.193-65.102 62.193",[1301],[1414,3172,3174,3175,3211,3212,2565,3227,3242,3243,3267],{"className":3173},[1417],"Closest pair: only the ",[385,3176,3178],{"className":3177},[388],[385,3179,3181,3199],{"className":3180,"ariaHidden":393},[392],[385,3182,3184,3187,3190,3193,3196],{"className":3183},[397],[385,3185],{"className":3186,"style":2802},[401],[385,3188,2395],{"className":3189,"style":2394},[406,407],[385,3191],{"className":3192,"style":1070},[887],[385,3194,2812],{"className":3195},[1074],[385,3197],{"className":3198,"style":1070},[887],[385,3200,3202,3205,3208],{"className":3201},[397],[385,3203],{"className":3204,"style":971},[401],[385,3206,514],{"className":3207},[406],[385,3209,2395],{"className":3210,"style":2394},[406,407]," box left of ",[385,3213,3215],{"className":3214},[388],[385,3216,3218],{"className":3217,"ariaHidden":393},[392],[385,3219,3221,3224],{"className":3220},[397],[385,3222],{"className":3223,"style":668},[401],[385,3225,381],{"className":3226},[406,407],[385,3228,3230],{"className":3229},[388],[385,3231,3233],{"className":3232,"ariaHidden":393},[392],[385,3234,3236,3239],{"className":3235},[397],[385,3237],{"className":3238,"style":971},[401],[385,3240,2395],{"className":3241,"style":2394},[406,407],", and it holds ",[385,3244,3246],{"className":3245},[388],[385,3247,3249],{"className":3248,"ariaHidden":393},[392],[385,3250,3252,3255,3258,3261,3264],{"className":3251},[397],[385,3253],{"className":3254,"style":840},[401],[385,3256,845],{"className":3257,"style":844},[406,407],[385,3259,474],{"className":3260},[466],[385,3262,628],{"className":3263},[406],[385,3265,551],{"className":3266},[547]," points",[679,3269,3271],{"id":3270},"interval-and-rectangle-sweeps","Interval and rectangle sweeps",[381,3273,3274,3275,3312,3315],{},"The practice problems are sweeps in disguise, and they reveal a simpler status\nstructure than a full BST: when objects are axis-aligned, events are ",[385,3276,3278],{"className":3277},[388],[385,3279,3281,3303],{"className":3280,"ariaHidden":393},[392],[385,3282,3284,3287,3290,3294,3297,3300],{"className":3283},[397],[385,3285],{"className":3286,"style":840},[401],[385,3288,1075],{"className":3289},[406],[385,3291,3293],{"className":3292},[406],"1\u002F",[385,3295],{"className":3296,"style":1070},[887],[385,3298,2667],{"className":3299},[1074],[385,3301],{"className":3302,"style":1070},[887],[385,3304,3306,3309],{"className":3305},[397],[385,3307],{"className":3308,"style":644},[401],[385,3310,628],{"className":3311},[406],[411,3313,3314],{},"deltas"," and the status is a count or a segment tree.",[381,3317,3318,3321,3322,3432,3433,3452,3453,3506,3507,3452,3525,3578,3579,3582],{},[610,3319,3320],{},"Maximum overlap (My Calendar III, Describe the Painting)."," Given intervals\n",[385,3323,3325],{"className":3324},[388],[385,3326,3328],{"className":3327,"ariaHidden":393},[392],[385,3329,3331,3334,3337,3381,3384,3387,3429],{"className":3330},[397],[385,3332],{"className":3333,"style":840},[401],[385,3335,2614],{"className":3336},[466],[385,3338,3340,3344],{"className":3339},[406],[385,3341,3343],{"className":3342},[406],"ℓ",[385,3345,3347],{"className":3346},[582],[385,3348,3350,3372],{"className":3349},[482,483],[385,3351,3353,3369],{"className":3352},[487],[385,3354,3357],{"className":3355,"style":3356},[491],"height:0.3117em;",[385,3358,3359,3362],{"style":2639},[385,3360],{"className":3361,"style":500},[499],[385,3363,3365],{"className":3364},[504,505,506,507],[385,3366,3368],{"className":3367},[406,407,507],"i",[385,3370,534],{"className":3371},[533],[385,3373,3375],{"className":3374},[487],[385,3376,3379],{"className":3377,"style":3378},[491],"height:0.15em;",[385,3380],{},[385,3382,2685],{"className":3383},[2684],[385,3385],{"className":3386,"style":888},[887],[385,3388,3390,3394],{"className":3389},[406],[385,3391,3393],{"className":3392,"style":844},[406,407],"r",[385,3395,3397],{"className":3396},[582],[385,3398,3400,3421],{"className":3399},[482,483],[385,3401,3403,3418],{"className":3402},[487],[385,3404,3406],{"className":3405,"style":3356},[491],[385,3407,3409,3412],{"style":3408},"top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;",[385,3410],{"className":3411,"style":500},[499],[385,3413,3415],{"className":3414},[504,505,506,507],[385,3416,3368],{"className":3417},[406,407,507],[385,3419,534],{"className":3420},[533],[385,3422,3424],{"className":3423},[487],[385,3425,3427],{"className":3426,"style":3378},[491],[385,3428],{},[385,3430,551],{"className":3431},[547],", find the maximum number covering any point — or the coverage\nprofile. Emit a ",[385,3434,3436],{"className":3435},[388],[385,3437,3439],{"className":3438,"ariaHidden":393},[392],[385,3440,3442,3446,3449],{"className":3441},[397],[385,3443],{"className":3444,"style":3445},[401],"height:0.7278em;vertical-align:-0.0833em;",[385,3447,1075],{"className":3448},[406],[385,3450,628],{"className":3451},[406]," event at each ",[385,3454,3456],{"className":3455},[388],[385,3457,3459],{"className":3458,"ariaHidden":393},[392],[385,3460,3462,3466],{"className":3461},[397],[385,3463],{"className":3464,"style":3465},[401],"height:0.8444em;vertical-align:-0.15em;",[385,3467,3469,3472],{"className":3468},[406],[385,3470,3343],{"className":3471},[406],[385,3473,3475],{"className":3474},[582],[385,3476,3478,3498],{"className":3477},[482,483],[385,3479,3481,3495],{"className":3480},[487],[385,3482,3484],{"className":3483,"style":3356},[491],[385,3485,3486,3489],{"style":2639},[385,3487],{"className":3488,"style":500},[499],[385,3490,3492],{"className":3491},[504,505,506,507],[385,3493,3368],{"className":3494},[406,407,507],[385,3496,534],{"className":3497},[533],[385,3499,3501],{"className":3500},[487],[385,3502,3504],{"className":3503,"style":3378},[491],[385,3505],{}," and a ",[385,3508,3510],{"className":3509},[388],[385,3511,3513],{"className":3512,"ariaHidden":393},[392],[385,3514,3516,3519,3522],{"className":3515},[397],[385,3517],{"className":3518,"style":3445},[401],[385,3520,2667],{"className":3521},[406],[385,3523,628],{"className":3524},[406],[385,3526,3528],{"className":3527},[388],[385,3529,3531],{"className":3530,"ariaHidden":393},[392],[385,3532,3534,3538],{"className":3533},[397],[385,3535],{"className":3536,"style":3537},[401],"height:0.5806em;vertical-align:-0.15em;",[385,3539,3541,3544],{"className":3540},[406],[385,3542,3393],{"className":3543,"style":844},[406,407],[385,3545,3547],{"className":3546},[582],[385,3548,3550,3570],{"className":3549},[482,483],[385,3551,3553,3567],{"className":3552},[487],[385,3554,3556],{"className":3555,"style":3356},[491],[385,3557,3558,3561],{"style":3408},[385,3559],{"className":3560,"style":500},[499],[385,3562,3564],{"className":3563},[504,505,506,507],[385,3565,3368],{"className":3566},[406,407,507],[385,3568,534],{"className":3569},[533],[385,3571,3573],{"className":3572},[487],[385,3574,3576],{"className":3575,"style":3378},[491],[385,3577],{},", sort\nthe events by coordinate, and sweep a running sum. The running sum ",[411,3580,3581],{},"is"," the number\nof intervals covering the current coordinate; its maximum is the answer.",[3584,3585,3589],"pre",{"className":3586,"code":3587,"language":3588,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Max-Overlap}(\\{[\\ell_i, r_i)\\})$ — sweep $\\pm1$ events\n$E \\gets \\varnothing$\nfor each interval $[\\ell_i, r_i)$ do\n  add event $(\\ell_i, +1)$ to $E$       \u002F\u002F begins\n  add event $(r_i, -1)$ to $E$          \u002F\u002F ends\nsort $E$ by coordinate; break ties with $-1$ before $+1$\n$cur \\gets 0;\\ best \\gets 0$\nfor each event $(x, \\delta)$ in $E$ do\n  $cur \\gets cur + \\delta$\n  $best \\gets \\max(best, cur)$\nreturn $best$\n","algorithm",[3590,3591,3592,3598,3603,3608,3613,3618,3623,3628,3633,3638,3643],"code",{"__ignoreMap":376},[385,3593,3595],{"class":3594,"line":6},"line",[385,3596,3597],{},"caption: $\\textsc{Max-Overlap}(\\{[\\ell_i, r_i)\\})$ — sweep $\\pm1$ events\n",[385,3599,3600],{"class":3594,"line":18},[385,3601,3602],{},"$E \\gets \\varnothing$\n",[385,3604,3605],{"class":3594,"line":24},[385,3606,3607],{},"for each interval $[\\ell_i, r_i)$ do\n",[385,3609,3610],{"class":3594,"line":73},[385,3611,3612],{},"  add event $(\\ell_i, +1)$ to $E$       \u002F\u002F begins\n",[385,3614,3615],{"class":3594,"line":102},[385,3616,3617],{},"  add event $(r_i, -1)$ to $E$          \u002F\u002F ends\n",[385,3619,3620],{"class":3594,"line":108},[385,3621,3622],{},"sort $E$ by coordinate; break ties with $-1$ before $+1$\n",[385,3624,3625],{"class":3594,"line":116},[385,3626,3627],{},"$cur \\gets 0;\\ best \\gets 0$\n",[385,3629,3630],{"class":3594,"line":196},[385,3631,3632],{},"for each event $(x, \\delta)$ in $E$ do\n",[385,3634,3635],{"class":3594,"line":202},[385,3636,3637],{},"  $cur \\gets cur + \\delta$\n",[385,3639,3640],{"class":3594,"line":283},[385,3641,3642],{},"  $best \\gets \\max(best, cur)$\n",[385,3644,3645],{"class":3594,"line":333},[385,3646,3647],{},"return $best$\n",[381,3649,3650,3651,3681,3682,3685,3686,3728,3729,3750,3751,3790,3791,3815],{},"The tie-break matters: at a shared coordinate, ending an interval before starting\nthe next reflects half-open ",[385,3652,3654],{"className":3653},[388],[385,3655,3657],{"className":3656,"ariaHidden":393},[392],[385,3658,3660,3663,3666,3669,3672,3675,3678],{"className":3659},[397],[385,3661],{"className":3662,"style":840},[401],[385,3664,2614],{"className":3665},[466],[385,3667,3343],{"className":3668},[406],[385,3670,2685],{"className":3671},[2684],[385,3673],{"className":3674,"style":888},[887],[385,3676,3393],{"className":3677,"style":844},[406,407],[385,3679,551],{"className":3680},[547]," intervals and avoids spuriously counting an\nendpoint touch as an overlap. To ",[411,3683,3684],{},"describe"," the painting rather than only its peak,\nemit a coverage segment between consecutive distinct event coordinates whenever\n",[385,3687,3689],{"className":3688},[388],[385,3690,3692,3718],{"className":3691,"ariaHidden":393},[392],[385,3693,3695,3699,3702,3705,3708,3711,3715],{"className":3694},[397],[385,3696],{"className":3697,"style":3698},[401],"height:0.5782em;vertical-align:-0.0391em;",[385,3700,1808],{"className":3701},[406,407],[385,3703,1893],{"className":3704},[406,407],[385,3706,3393],{"className":3707,"style":844},[406,407],[385,3709],{"className":3710,"style":1650},[887],[385,3712,3714],{"className":3713},[1654],">",[385,3716],{"className":3717,"style":1650},[887],[385,3719,3721,3724],{"className":3720},[397],[385,3722],{"className":3723,"style":644},[401],[385,3725,3727],{"className":3726},[406],"0",", merging equal-",[385,3730,3732],{"className":3731},[388],[385,3733,3735],{"className":3734,"ariaHidden":393},[392],[385,3736,3738,3741,3744,3747],{"className":3737},[397],[385,3739],{"className":3740,"style":402},[401],[385,3742,1808],{"className":3743},[406,407],[385,3745,1893],{"className":3746},[406,407],[385,3748,3393],{"className":3749,"style":844},[406,407]," neighbors. The sweep costs ",[385,3752,3754],{"className":3753},[388],[385,3755,3757],{"className":3756,"ariaHidden":393},[392],[385,3758,3760,3763,3766,3769,3772,3775,3781,3784,3787],{"className":3759},[397],[385,3761],{"className":3762,"style":840},[401],[385,3764,845],{"className":3765,"style":844},[406,407],[385,3767,474],{"className":3768},[466],[385,3770,408],{"className":3771},[406,407],[385,3773],{"className":3774,"style":888},[887],[385,3776,3778],{"className":3777},[877],[385,3779,883],{"className":3780,"style":882},[406,881],[385,3782],{"className":3783,"style":888},[887],[385,3785,408],{"className":3786},[406,407],[385,3788,551],{"className":3789},[547]," for the\nsort and ",[385,3792,3794],{"className":3793},[388],[385,3795,3797],{"className":3796,"ariaHidden":393},[392],[385,3798,3800,3803,3806,3809,3812],{"className":3799},[397],[385,3801],{"className":3802,"style":840},[401],[385,3804,845],{"className":3805,"style":844},[406,407],[385,3807,474],{"className":3808},[466],[385,3810,408],{"className":3811},[406,407],[385,3813,551],{"className":3814},[547]," for the pass.",[1269,3817,3819,3961],{"className":3818},[1272,1273],[1275,3820,3824],{"xmlns":1277,"width":3821,"height":3822,"viewBox":3823},"292.106","148.656","-75 -75 219.080 111.492",[1282,3825,3826,3829,3836,3839,3846,3849,3856,3863,3878,3884,3897,3903,3916,3919,3922,3929,3932,3935,3938],{"stroke":1284,"style":1285},[1287,3827],{"fill":1289,"d":3828},"M-47.706-57.407h113.81",[1282,3830,3832],{"transform":3831},"translate(13.888 -82.625)",[1287,3833],{"d":3834,"fill":1284,"stroke":1284,"className":3835,"style":1315},"M-74.190 27.952L-75.753 27.952Q-75.792 27.952-75.819 27.911Q-75.847 27.870-75.847 27.823L-75.823 27.722Q-75.780 27.663-75.725 27.655Q-75.401 27.655-75.159 27.511Q-75.014 27.425-74.897 27.272Q-74.780 27.120-74.733 27.081L-71.784 22.350Q-71.718 22.241-71.593 22.241L-71.511 22.241Q-71.397 22.241-71.374 22.350L-70.733 27.495Q-70.679 27.655-70.136 27.655Q-70.038 27.686-70.038 27.776L-70.061 27.882Q-70.097 27.940-70.159 27.952L-72.159 27.952Q-72.194 27.952-72.225 27.911Q-72.257 27.870-72.257 27.823L-72.229 27.722Q-72.198 27.667-72.136 27.655Q-71.542 27.655-71.511 27.448L-71.671 26.143L-73.831 26.143L-74.487 27.182Q-74.495 27.229-74.526 27.302Q-74.557 27.374-74.557 27.417Q-74.557 27.550-74.438 27.602Q-74.319 27.655-74.175 27.655Q-74.081 27.686-74.081 27.776L-74.104 27.882Q-74.136 27.940-74.190 27.952M-72.030 23.265L-73.647 25.847L-71.710 25.847",[1301],[1287,3837],{"fill":1289,"d":3838},"M-19.253-43.18h128.037",[1282,3840,3842],{"transform":3841},"translate(42.122 -68.399)",[1287,3843],{"d":3844,"fill":1284,"stroke":1284,"className":3845,"style":1315},"M-72.511 27.952L-75.655 27.952Q-75.753 27.921-75.753 27.823L-75.725 27.722Q-75.694 27.667-75.632 27.655Q-75.190 27.655-75.032 27.616Q-74.874 27.577-74.831 27.350L-73.753 23.030Q-73.725 22.964-73.725 22.897Q-73.725 22.839-73.792 22.815Q-73.936 22.784-74.358 22.784Q-74.464 22.757-74.464 22.655L-74.432 22.554Q-74.397 22.495-74.343 22.487L-71.382 22.487Q-71.018 22.487-70.655 22.604Q-70.292 22.722-70.050 22.975Q-69.807 23.229-69.807 23.608Q-69.807 24.007-70.077 24.319Q-70.347 24.632-70.743 24.829Q-71.139 25.026-71.526 25.097Q-71.003 25.151-70.612 25.446Q-70.222 25.741-70.222 26.233Q-70.222 26.612-70.440 26.932Q-70.659 27.253-71.003 27.475Q-71.347 27.698-71.751 27.825Q-72.155 27.952-72.511 27.952M-74.182 27.608Q-74.182 27.655-73.936 27.655L-72.671 27.655Q-72.268 27.655-71.888 27.456Q-71.507 27.257-71.268 26.911Q-71.030 26.565-71.030 26.167Q-71.030 25.765-71.288 25.503Q-71.546 25.241-71.952 25.241L-73.608 25.241L-74.151 27.409Q-74.182 27.534-74.182 27.608M-73.069 23.089L-73.542 24.983L-72.237 24.983Q-71.862 24.983-71.479 24.804Q-71.097 24.624-70.845 24.304Q-70.593 23.983-70.593 23.600Q-70.593 23.233-70.839 23.009Q-71.085 22.784-71.456 22.784L-72.663 22.784Q-72.835 22.784-72.897 22.798Q-72.960 22.811-72.993 22.870Q-73.026 22.929-73.069 23.089",[1301],[1287,3847],{"fill":1289,"d":3848},"M9.2-28.954h42.679",[1282,3850,3852],{"transform":3851},"translate(70.666 -54.172)",[1287,3853],{"d":3854,"fill":1284,"stroke":1284,"className":3855,"style":1315},"M-74.944 26.151Q-74.944 26.651-74.737 27.030Q-74.530 27.409-74.147 27.616Q-73.764 27.823-73.264 27.823Q-72.745 27.823-72.257 27.575Q-71.768 27.327-71.417 26.899Q-71.065 26.472-70.944 25.975Q-70.929 25.913-70.854 25.913L-70.753 25.913Q-70.718 25.913-70.690 25.940Q-70.663 25.968-70.663 26.007Q-70.663 26.015-70.671 26.030Q-70.815 26.612-71.231 27.093Q-71.647 27.573-72.220 27.847Q-72.792 28.120-73.389 28.120Q-74.046 28.120-74.585 27.841Q-75.124 27.561-75.429 27.054Q-75.733 26.546-75.733 25.890Q-75.733 25.198-75.415 24.546Q-75.097 23.893-74.550 23.390Q-74.003 22.886-73.335 22.602Q-72.667 22.319-71.991 22.319Q-71.561 22.319-71.196 22.501Q-70.831 22.682-70.600 23.022L-69.960 22.343Q-69.936 22.319-69.901 22.319L-69.854 22.319Q-69.815 22.319-69.792 22.347Q-69.768 22.374-69.768 22.417L-69.768 22.440L-70.304 24.561Q-70.319 24.632-70.382 24.632L-70.503 24.632Q-70.593 24.632-70.593 24.526Q-70.565 24.350-70.565 24.159Q-70.565 23.737-70.723 23.386Q-70.882 23.034-71.186 22.825Q-71.491 22.616-71.921 22.616Q-72.573 22.616-73.136 22.919Q-73.698 23.222-74.100 23.739Q-74.503 24.257-74.723 24.888Q-74.944 25.518-74.944 26.151",[1301],[1282,3857,3859],{"transform":3858},"translate(23.022 -91.733)",[1287,3860],{"d":3861,"fill":1284,"stroke":1284,"className":3862,"style":1315},"M-73.038 26.136L-75.511 26.136Q-75.589 26.124-75.638 26.075Q-75.686 26.026-75.686 25.952Q-75.686 25.878-75.638 25.829Q-75.589 25.780-75.511 25.768L-73.038 25.768L-73.038 23.288Q-73.011 23.120-72.854 23.120Q-72.780 23.120-72.731 23.169Q-72.682 23.218-72.671 23.288L-72.671 25.768L-70.198 25.768Q-70.030 25.800-70.030 25.952Q-70.030 26.104-70.198 26.136L-72.671 26.136L-72.671 28.616Q-72.682 28.686-72.731 28.735Q-72.780 28.784-72.854 28.784Q-73.011 28.784-73.038 28.616L-73.038 26.136M-65.956 27.952L-68.749 27.952L-68.749 27.655Q-67.686 27.655-67.686 27.393L-67.686 23.225Q-68.116 23.440-68.796 23.440L-68.796 23.143Q-67.776 23.143-67.261 22.632L-67.116 22.632Q-67.042 22.651-67.022 22.729L-67.022 27.393Q-67.022 27.655-65.956 27.655",[1301],[1282,3864,3865,3872],{"stroke":1289,"fontSize":1389},[1282,3866,3868],{"transform":3867},"translate(136.833 -91.733)",[1287,3869],{"d":3870,"fill":1284,"stroke":1284,"className":3871,"style":1315},"M-70.440 26.136L-75.272 26.136Q-75.347 26.124-75.397 26.075Q-75.448 26.026-75.448 25.952Q-75.448 25.800-75.272 25.768L-70.440 25.768Q-70.272 25.796-70.272 25.952Q-70.272 26.108-70.440 26.136",[1301],[1282,3873,3874],{"transform":3867},[1287,3875],{"d":3876,"fill":1284,"stroke":1284,"className":3877,"style":1315},"M-65.954 27.952L-68.747 27.952L-68.747 27.655Q-67.685 27.655-67.685 27.393L-67.685 23.225Q-68.114 23.440-68.794 23.440L-68.794 23.143Q-67.775 23.143-67.259 22.632L-67.114 22.632Q-67.040 22.651-67.021 22.729L-67.021 27.393Q-67.021 27.655-65.954 27.655",[1301],[1282,3879,3881],{"transform":3880},"translate(51.475 -77.507)",[1287,3882],{"d":3861,"fill":1284,"stroke":1284,"className":3883,"style":1315},[1301],[1282,3885,3886,3892],{"stroke":1289,"fontSize":1389},[1282,3887,3889],{"transform":3888},"translate(179.512 -77.507)",[1287,3890],{"d":3870,"fill":1284,"stroke":1284,"className":3891,"style":1315},[1301],[1282,3893,3894],{"transform":3888},[1287,3895],{"d":3876,"fill":1284,"stroke":1284,"className":3896,"style":1315},[1301],[1282,3898,3900],{"transform":3899},"translate(79.928 -63.28)",[1287,3901],{"d":3861,"fill":1284,"stroke":1284,"className":3902,"style":1315},[1301],[1282,3904,3905,3911],{"stroke":1289,"fontSize":1389},[1282,3906,3908],{"transform":3907},"translate(122.607 -63.28)",[1287,3909],{"d":3870,"fill":1284,"stroke":1284,"className":3910,"style":1315},[1301],[1282,3912,3913],{"transform":3907},[1287,3914],{"d":3876,"fill":1284,"stroke":1284,"className":3915,"style":1315},[1301],[1287,3917],{"fill":1289,"d":3918},"M-61.932 27.952H126.7",[1287,3920],{"stroke":1289,"d":3921},"m128.7 27.952-3.2-1.6 1.2 1.6-1.2 1.6",[1282,3923,3925],{"transform":3924},"translate(208.393 1.937)",[1287,3926],{"d":3927,"fill":1284,"stroke":1284,"className":3928,"style":1302},"M-75.430 27.662Q-75.254 27.789-74.981 27.789Q-74.691 27.789-74.478 27.535Q-74.265 27.280-74.186 26.963L-73.782 25.350Q-73.694 24.973-73.694 24.784Q-73.694 24.559-73.821 24.397Q-73.949 24.234-74.168 24.234Q-74.586 24.234-74.918 24.584Q-75.249 24.933-75.368 25.386Q-75.386 25.469-75.456 25.469L-75.566 25.469Q-75.654 25.469-75.654 25.350Q-75.522 24.810-75.100 24.392Q-74.678 23.975-74.151 23.975Q-73.817 23.975-73.542 24.146Q-73.267 24.318-73.153 24.612Q-72.995 24.340-72.749 24.157Q-72.503 23.975-72.217 23.975Q-71.879 23.975-71.606 24.142Q-71.334 24.309-71.334 24.630Q-71.334 24.858-71.477 25.027Q-71.619 25.197-71.857 25.197Q-71.997 25.197-72.103 25.104Q-72.208 25.012-72.208 24.867Q-72.208 24.682-72.085 24.540Q-71.962 24.397-71.778 24.362Q-71.958 24.234-72.235 24.234Q-72.525 24.234-72.736 24.491Q-72.947 24.748-73.026 25.065L-73.430 26.673Q-73.522 27.034-73.522 27.231Q-73.522 27.464-73.393 27.627Q-73.263 27.789-73.034 27.789Q-72.749 27.789-72.501 27.620Q-72.252 27.451-72.079 27.179Q-71.905 26.906-71.839 26.638Q-71.830 26.607-71.806 26.583Q-71.782 26.559-71.747 26.559L-71.641 26.559Q-71.602 26.559-71.576 26.596Q-71.549 26.634-71.549 26.673Q-71.637 27.020-71.857 27.339Q-72.076 27.658-72.393 27.855Q-72.709 28.053-73.052 28.053Q-73.390 28.053-73.665 27.884Q-73.940 27.715-74.063 27.411Q-74.212 27.680-74.461 27.866Q-74.709 28.053-74.990 28.053Q-75.333 28.053-75.607 27.886Q-75.882 27.719-75.882 27.394Q-75.882 27.170-75.733 26.998Q-75.583 26.827-75.350 26.827Q-75.205 26.827-75.102 26.919Q-74.999 27.012-74.999 27.161Q-74.999 27.337-75.122 27.484Q-75.245 27.631-75.430 27.662",[1301],[1287,3930],{"fill":1289,"d":3931},"M-47.706 30.797v-5.69M-19.253 30.797v-5.69M9.2 30.797v-5.69M51.879 30.797v-5.69M66.105 30.797v-5.69M108.784 30.797v-5.69",[1287,3933],{"fill":1289,"d":3934,"style":1406},"M-47.706 16.57h28.453V5.19H9.199V-6.193h42.68V5.19h14.226v11.382h42.679v11.38",[1287,3936],{"fill":1289,"stroke":1381,"d":3937,"style":1383},"M9.2-6.192h42.679",[1282,3939,3940],{"fill":1381,"stroke":1381},[1282,3941,3942,3949,3955],{"fill":1381,"stroke":1289,"fontSize":1389},[1282,3943,3945],{"transform":3944},"translate(92.569 -40.101)",[1287,3946],{"d":3947,"fill":1381,"stroke":1381,"className":3948,"style":1315},"M-75.151 26.936Q-75.151 27.175-75.063 27.364Q-74.975 27.554-74.804 27.665Q-74.632 27.776-74.397 27.776Q-73.889 27.776-73.434 27.583Q-72.979 27.390-72.694 27.015Q-72.675 26.983-72.624 26.983Q-72.573 26.983-72.526 27.034Q-72.479 27.085-72.479 27.136Q-72.479 27.175-72.503 27.198Q-72.819 27.612-73.335 27.821Q-73.850 28.030-74.417 28.030Q-74.718 28.030-74.973 27.929Q-75.229 27.827-75.421 27.640Q-75.612 27.452-75.718 27.194Q-75.823 26.936-75.823 26.647Q-75.823 26.225-75.634 25.823Q-75.444 25.421-75.118 25.104Q-74.792 24.788-74.389 24.606Q-73.987 24.425-73.565 24.425Q-73.182 24.425-72.870 24.591Q-72.557 24.757-72.557 25.112Q-72.557 25.327-72.688 25.487Q-72.819 25.647-73.030 25.647Q-73.163 25.647-73.257 25.561Q-73.350 25.475-73.350 25.343Q-73.350 25.171-73.229 25.038Q-73.108 24.905-72.944 24.882Q-73.147 24.679-73.585 24.679Q-73.952 24.679-74.249 24.897Q-74.546 25.116-74.747 25.468Q-74.948 25.819-75.050 26.218Q-75.151 26.616-75.151 26.936M-71.550 27.030Q-71.550 26.780-71.475 26.493Q-71.401 26.206-71.264 25.854Q-71.128 25.503-71.065 25.335Q-70.975 25.112-70.975 24.929Q-70.975 24.679-71.143 24.679Q-71.460 24.679-71.669 24.985Q-71.878 25.292-71.983 25.679Q-71.995 25.753-72.065 25.753L-72.167 25.753Q-72.202 25.753-72.229 25.718Q-72.257 25.682-72.257 25.655L-72.257 25.624Q-72.132 25.163-71.835 24.794Q-71.538 24.425-71.128 24.425Q-70.932 24.425-70.759 24.509Q-70.585 24.593-70.483 24.745Q-70.382 24.897-70.382 25.104Q-70.382 25.257-70.440 25.393Q-70.530 25.624-70.632 25.890Q-70.733 26.155-70.790 26.337Q-70.847 26.518-70.891 26.733Q-70.936 26.948-70.936 27.143Q-70.936 27.417-70.813 27.597Q-70.690 27.776-70.432 27.776Q-70.163 27.776-69.854 27.548Q-69.546 27.319-69.495 27.065L-68.929 24.792Q-68.889 24.667-68.786 24.585Q-68.682 24.503-68.557 24.503Q-68.448 24.503-68.368 24.577Q-68.288 24.651-68.288 24.761Q-68.288 24.784-68.304 24.847L-68.870 27.120Q-68.874 27.159-68.888 27.220Q-68.901 27.280-68.907 27.331Q-68.913 27.382-68.913 27.417Q-68.913 27.776-68.663 27.776Q-68.522 27.776-68.421 27.669Q-68.319 27.561-68.255 27.407Q-68.190 27.253-68.141 27.063Q-68.093 26.874-68.073 26.776Q-68.038 26.706-67.983 26.706L-67.878 26.706Q-67.839 26.706-67.815 26.735Q-67.792 26.765-67.792 26.800Q-67.792 26.815-67.800 26.831Q-67.870 27.128-67.968 27.386Q-68.065 27.643-68.241 27.837Q-68.417 28.030-68.679 28.030Q-68.944 28.030-69.167 27.897Q-69.389 27.765-69.479 27.526Q-69.667 27.753-69.923 27.891Q-70.179 28.030-70.448 28.030Q-70.772 28.030-71.022 27.921Q-71.272 27.811-71.411 27.587Q-71.550 27.362-71.550 27.030M-66.862 27.776Q-66.858 27.757-66.856 27.743Q-66.854 27.729-66.854 27.706L-66.261 25.335Q-66.222 25.179-66.222 25.042Q-66.222 24.893-66.274 24.786Q-66.327 24.679-66.460 24.679Q-66.639 24.679-66.759 24.848Q-66.878 25.018-66.934 25.204Q-66.991 25.390-67.061 25.679Q-67.073 25.753-67.143 25.753L-67.245 25.753Q-67.280 25.753-67.307 25.718Q-67.335 25.682-67.335 25.655L-67.335 25.624Q-67.249 25.292-67.155 25.050Q-67.061 24.807-66.886 24.616Q-66.710 24.425-66.444 24.425Q-66.159 24.425-65.927 24.573Q-65.694 24.722-65.628 24.975Q-65.421 24.722-65.151 24.573Q-64.882 24.425-64.565 24.425Q-64.386 24.425-64.229 24.497Q-64.073 24.569-63.979 24.706Q-63.886 24.843-63.886 25.022Q-63.886 25.237-64.018 25.395Q-64.151 25.554-64.358 25.554Q-64.491 25.554-64.585 25.470Q-64.679 25.386-64.679 25.249Q-64.679 25.073-64.557 24.940Q-64.436 24.807-64.268 24.784Q-64.401 24.679-64.581 24.679Q-64.929 24.679-65.198 24.915Q-65.468 25.151-65.663 25.511L-66.222 27.745Q-66.253 27.870-66.358 27.950Q-66.464 28.030-66.589 28.030Q-66.698 28.030-66.780 27.960Q-66.862 27.890-66.862 27.776",[1301],[1282,3950,3951],{"transform":3944},[1287,3952],{"d":3953,"fill":1381,"stroke":1381,"className":3954,"style":1315},"M-55.162 26.975L-60.475 26.975Q-60.553 26.968-60.602 26.919Q-60.650 26.870-60.650 26.792Q-60.650 26.722-60.603 26.671Q-60.557 26.620-60.475 26.608L-55.162 26.608Q-55.088 26.620-55.041 26.671Q-54.994 26.722-54.994 26.792Q-54.994 26.870-55.043 26.919Q-55.092 26.968-55.162 26.975M-55.162 25.288L-60.475 25.288Q-60.553 25.280-60.602 25.231Q-60.650 25.182-60.650 25.104Q-60.650 25.034-60.603 24.983Q-60.557 24.932-60.475 24.921L-55.162 24.921Q-55.088 24.932-55.041 24.983Q-54.994 25.034-54.994 25.104Q-54.994 25.182-55.043 25.231Q-55.092 25.280-55.162 25.288",[1301],[1282,3956,3957],{"transform":3944},[1287,3958],{"d":3959,"fill":1381,"stroke":1381,"className":3960,"style":1315},"M-51.358 27.319Q-51.167 27.593-50.811 27.720Q-50.456 27.847-50.073 27.847Q-49.737 27.847-49.528 27.661Q-49.319 27.475-49.223 27.182Q-49.128 26.890-49.128 26.577Q-49.128 26.253-49.225 25.958Q-49.323 25.663-49.536 25.479Q-49.749 25.296-50.081 25.296L-50.647 25.296Q-50.678 25.296-50.708 25.266Q-50.737 25.237-50.737 25.210L-50.737 25.128Q-50.737 25.093-50.708 25.067Q-50.678 25.042-50.647 25.042L-50.167 25.007Q-49.881 25.007-49.684 24.802Q-49.487 24.597-49.391 24.302Q-49.296 24.007-49.296 23.729Q-49.296 23.350-49.495 23.112Q-49.694 22.874-50.073 22.874Q-50.393 22.874-50.682 22.981Q-50.971 23.089-51.135 23.311Q-50.956 23.311-50.833 23.438Q-50.710 23.565-50.710 23.737Q-50.710 23.909-50.835 24.034Q-50.960 24.159-51.135 24.159Q-51.307 24.159-51.432 24.034Q-51.557 23.909-51.557 23.737Q-51.557 23.370-51.333 23.122Q-51.108 22.874-50.768 22.753Q-50.428 22.632-50.073 22.632Q-49.725 22.632-49.362 22.753Q-48.999 22.874-48.751 23.124Q-48.503 23.374-48.503 23.729Q-48.503 24.214-48.821 24.597Q-49.139 24.979-49.616 25.151Q-49.065 25.261-48.665 25.647Q-48.264 26.034-48.264 26.569Q-48.264 27.026-48.528 27.382Q-48.792 27.737-49.214 27.929Q-49.635 28.120-50.073 28.120Q-50.483 28.120-50.876 27.985Q-51.268 27.850-51.534 27.565Q-51.799 27.280-51.799 26.862Q-51.799 26.667-51.667 26.538Q-51.534 26.409-51.342 26.409Q-51.217 26.409-51.114 26.468Q-51.010 26.526-50.948 26.632Q-50.885 26.737-50.885 26.862Q-50.885 27.057-51.020 27.188Q-51.155 27.319-51.358 27.319",[1301],[1414,3962,3964,3965,3984],{"className":3963},[1417],"Sweep ",[385,3966,3968],{"className":3967},[388],[385,3969,3971],{"className":3970,"ariaHidden":393},[392],[385,3972,3974,3977,3981],{"className":3973},[397],[385,3975],{"className":3976,"style":3445},[401],[385,3978,3980],{"className":3979},[406],"±",[385,3982,628],{"className":3983},[406]," events to track coverage; the peak is the max overlap",[381,3986,3987,3990,3991,4006,4007,4047,4048,4063,4064,4067,4068,4083,4084,1723],{},[610,3988,3989],{},"Skyline."," Given ",[385,3992,3994],{"className":3993},[388],[385,3995,3997],{"className":3996,"ariaHidden":393},[392],[385,3998,4000,4003],{"className":3999},[397],[385,4001],{"className":4002,"style":402},[401],[385,4004,408],{"className":4005},[406,407]," buildings as ",[385,4008,4010],{"className":4009},[388],[385,4011,4013],{"className":4012,"ariaHidden":393},[392],[385,4014,4016,4019,4022,4025,4028,4031,4034,4037,4040,4044],{"className":4015},[397],[385,4017],{"className":4018,"style":840},[401],[385,4020,474],{"className":4021},[466],[385,4023,3343],{"className":4024},[406],[385,4026,2685],{"className":4027},[2684],[385,4029],{"className":4030,"style":888},[887],[385,4032,3393],{"className":4033,"style":844},[406,407],[385,4035,2685],{"className":4036},[2684],[385,4038],{"className":4039,"style":888},[887],[385,4041,4043],{"className":4042},[406,407],"h",[385,4045,551],{"className":4046},[547],", output the silhouette of their\nunion. Sweep ",[385,4049,4051],{"className":4050},[388],[385,4052,4054],{"className":4053,"ariaHidden":393},[392],[385,4055,4057,4060],{"className":4056},[397],[385,4058],{"className":4059,"style":402},[401],[385,4061,721],{"className":4062},[406,407],"-events at building edges; the status is a ",[610,4065,4066],{},"multiset of active\nheights",". At a left edge insert ",[385,4069,4071],{"className":4070},[388],[385,4072,4074],{"className":4073,"ariaHidden":393},[392],[385,4075,4077,4080],{"className":4076},[397],[385,4078],{"className":4079,"style":971},[401],[385,4081,4043],{"className":4082},[406,407],"; at a right edge remove it. After each event\nthe current skyline height is the multiset's maximum, and a key point is emitted\nwhenever that maximum changes. A balanced multiset (or a heap with lazy deletion)\ngives ",[385,4085,4087],{"className":4086},[388],[385,4088,4090],{"className":4089,"ariaHidden":393},[392],[385,4091,4093,4096,4099,4102,4105,4108,4114,4117,4120],{"className":4092},[397],[385,4094],{"className":4095,"style":840},[401],[385,4097,845],{"className":4098,"style":844},[406,407],[385,4100,474],{"className":4101},[466],[385,4103,408],{"className":4104},[406,407],[385,4106],{"className":4107,"style":888},[887],[385,4109,4111],{"className":4110},[877],[385,4112,883],{"className":4113,"style":882},[406,881],[385,4115],{"className":4116,"style":888},[887],[385,4118,408],{"className":4119},[406,407],[385,4121,551],{"className":4122},[547],[381,4124,4125,4128,4129,4144,4145,4160,4161,2534,4164,4179,4180,4216,4217,4232,4233,4252,4253,4286,4287,4289,4290,4305,4306,4322],{},[610,4126,4127],{},"Union of rectangle areas (Rectangle Area II)."," Sweep a vertical line across\n",[385,4130,4132],{"className":4131},[388],[385,4133,4135],{"className":4134,"ariaHidden":393},[392],[385,4136,4138,4141],{"className":4137},[397],[385,4139],{"className":4140,"style":402},[401],[385,4142,721],{"className":4143},[406,407],"-events at rectangle left and right edges. The status tracks, for the current\n",[385,4146,4148],{"className":4147},[388],[385,4149,4151],{"className":4150,"ariaHidden":393},[392],[385,4152,4154,4157],{"className":4153},[397],[385,4155],{"className":4156,"style":402},[401],[385,4158,721],{"className":4159},[406,407],"-slab, the total ",[411,4162,4163],{},"length",[385,4165,4167],{"className":4166},[388],[385,4168,4170],{"className":4169,"ariaHidden":393},[392],[385,4171,4173,4176],{"className":4172},[397],[385,4174],{"className":4175,"style":668},[401],[385,4177,673],{"className":4178,"style":672},[406,407]," covered by at least one active rectangle. Each\nrectangle contributes a ",[385,4181,4183],{"className":4182},[388],[385,4184,4186,4207],{"className":4185,"ariaHidden":393},[392],[385,4187,4189,4192,4195,4198,4201,4204],{"className":4188},[397],[385,4190],{"className":4191,"style":840},[401],[385,4193,1075],{"className":4194},[406],[385,4196,3293],{"className":4197},[406],[385,4199],{"className":4200,"style":1070},[887],[385,4202,2667],{"className":4203},[1074],[385,4205],{"className":4206,"style":1070},[887],[385,4208,4210,4213],{"className":4209},[397],[385,4211],{"className":4212,"style":644},[401],[385,4214,628],{"className":4215},[406]," on its ",[385,4218,4220],{"className":4219},[388],[385,4221,4223],{"className":4222,"ariaHidden":393},[392],[385,4224,4226,4229],{"className":4225},[397],[385,4227],{"className":4228,"style":668},[401],[385,4230,673],{"className":4231,"style":672},[406,407],"-interval at its left\u002Fright edge; a\n",[610,4234,4235,4236,4251],{},"segment tree over compressed ",[385,4237,4239],{"className":4238},[388],[385,4240,4242],{"className":4241,"ariaHidden":393},[392],[385,4243,4245,4248],{"className":4244},[397],[385,4246],{"className":4247,"style":668},[401],[385,4249,673],{"className":4250,"style":672},[406,407],"-coordinates"," maintains the covered length under\nthese interval updates in ",[385,4254,4256],{"className":4255},[388],[385,4257,4259],{"className":4258,"ariaHidden":393},[392],[385,4260,4262,4265,4268,4271,4277,4280,4283],{"className":4261},[397],[385,4263],{"className":4264,"style":840},[401],[385,4266,845],{"className":4267,"style":844},[406,407],[385,4269,474],{"className":4270},[466],[385,4272,4274],{"className":4273},[877],[385,4275,883],{"className":4276,"style":882},[406,881],[385,4278],{"className":4279,"style":888},[887],[385,4281,408],{"className":4282},[406,407],[385,4284,551],{"className":4285},[547]," each, exactly the coordinate-compressed\nsegment tree from the ",[622,4288,114],{"href":115}," lesson. The area is the sum over\nslabs of (covered ",[385,4291,4293],{"className":4292},[388],[385,4294,4296],{"className":4295,"ariaHidden":393},[392],[385,4297,4299,4302],{"className":4298},[397],[385,4300],{"className":4301,"style":668},[401],[385,4303,673],{"className":4304,"style":672},[406,407],"-length) ",[385,4307,4309],{"className":4308},[388],[385,4310,4312],{"className":4311,"ariaHidden":393},[392],[385,4313,4315,4319],{"className":4314},[397],[385,4316],{"className":4317,"style":4318},[401],"height:0.6667em;vertical-align:-0.0833em;",[385,4320,2812],{"className":4321},[406]," (slab width):",[385,4324,4327],{"className":4325},[4326],"katex-display",[385,4328,4330],{"className":4329},[388],[385,4331,4333,4362,4500,4571],{"className":4332,"ariaHidden":393},[392],[385,4334,4336,4339,4347,4350,4353,4356,4359],{"className":4335},[397],[385,4337],{"className":4338,"style":402},[401],[385,4340,4343],{"className":4341},[406,4342],"text",[385,4344,4346],{"className":4345},[406],"area",[385,4348],{"className":4349,"style":1650},[887],[385,4351],{"className":4352,"style":1650},[887],[385,4354,1655],{"className":4355},[1654],[385,4357],{"className":4358,"style":1650},[887],[385,4360],{"className":4361,"style":1650},[887],[385,4363,4365,4369,4429,4432,4477,4480,4487,4490,4493,4497],{"className":4364},[397],[385,4366],{"className":4367,"style":4368},[401],"height:2.3521em;vertical-align:-1.3021em;",[385,4370,4373],{"className":4371},[877,4372],"op-limits",[385,4374,4376,4420],{"className":4375},[482,483],[385,4377,4379,4417],{"className":4378},[487],[385,4380,4383,4403],{"className":4381,"style":4382},[491],"height:1.05em;",[385,4384,4386,4390],{"style":4385},"top:-1.8479em;margin-left:0em;",[385,4387],{"className":4388,"style":4389},[499],"height:3.05em;",[385,4391,4393],{"className":4392},[504,505,506,507],[385,4394,4396],{"className":4395},[406,507],[385,4397,4399],{"className":4398},[406,4342,507],[385,4400,4402],{"className":4401},[406,507],"slabs",[385,4404,4406,4409],{"style":4405},"top:-3.05em;",[385,4407],{"className":4408,"style":4389},[499],[385,4410,4411],{},[385,4412,4416],{"className":4413},[877,4414,4415],"op-symbol","large-op","∑",[385,4418,534],{"className":4419},[533],[385,4421,4423],{"className":4422},[487],[385,4424,4427],{"className":4425,"style":4426},[491],"height:1.3021em;",[385,4428],{},[385,4430],{"className":4431,"style":888},[887],[385,4433,4435,4442],{"className":4434},[877],[385,4436,4438],{"className":4437},[877],[385,4439,4441],{"className":4440},[406,881],"covered",[385,4443,4445],{"className":4444},[582],[385,4446,4448,4469],{"className":4447},[482,483],[385,4449,4451,4466],{"className":4450},[487],[385,4452,4454],{"className":4453,"style":2636},[491],[385,4455,4457,4460],{"style":4456},"top:-2.55em;margin-right:0.05em;",[385,4458],{"className":4459,"style":500},[499],[385,4461,4463],{"className":4462},[504,505,506,507],[385,4464,673],{"className":4465,"style":672},[406,407,507],[385,4467,534],{"className":4468},[533],[385,4470,4472],{"className":4471},[487],[385,4473,4475],{"className":4474,"style":2658},[491],[385,4476],{},[385,4478,474],{"className":4479},[466],[385,4481,4483],{"className":4482},[406,4342],[385,4484,4486],{"className":4485},[406],"slab",[385,4488,551],{"className":4489},[547],[385,4491],{"className":4492,"style":1070},[887],[385,4494,4496],{"className":4495},[1074],"⋅",[385,4498],{"className":4499,"style":1070},[887],[385,4501,4503,4506,4512,4562,4565,4568],{"className":4502},[397],[385,4504],{"className":4505,"style":459},[401],[385,4507,4509],{"className":4508},[466],[385,4510,474],{"className":4511},[472,473],[385,4513,4515,4518],{"className":4514},[406],[385,4516,721],{"className":4517},[406,407],[385,4519,4521],{"className":4520},[582],[385,4522,4524,4553],{"className":4523},[482,483],[385,4525,4527,4550],{"className":4526},[487],[385,4528,4530],{"className":4529,"style":3356},[491],[385,4531,4532,4535],{"style":2639},[385,4533],{"className":4534,"style":500},[499],[385,4536,4538],{"className":4537},[504,505,506,507],[385,4539,4541,4544,4547],{"className":4540},[406,507],[385,4542,3368],{"className":4543},[406,407,507],[385,4545,1075],{"className":4546},[1074,507],[385,4548,628],{"className":4549},[406,507],[385,4551,534],{"className":4552},[533],[385,4554,4556],{"className":4555},[487],[385,4557,4560],{"className":4558,"style":4559},[491],"height:0.2083em;",[385,4561],{},[385,4563],{"className":4564,"style":1070},[887],[385,4566,2667],{"className":4567},[1074],[385,4569],{"className":4570,"style":1070},[887],[385,4572,4574,4577,4617,4623],{"className":4573},[397],[385,4575],{"className":4576,"style":459},[401],[385,4578,4580,4583],{"className":4579},[406],[385,4581,721],{"className":4582},[406,407],[385,4584,4586],{"className":4585},[582],[385,4587,4589,4609],{"className":4588},[482,483],[385,4590,4592,4606],{"className":4591},[487],[385,4593,4595],{"className":4594,"style":3356},[491],[385,4596,4597,4600],{"style":2639},[385,4598],{"className":4599,"style":500},[499],[385,4601,4603],{"className":4602},[504,505,506,507],[385,4604,3368],{"className":4605},[406,407,507],[385,4607,534],{"className":4608},[533],[385,4610,4612],{"className":4611},[487],[385,4613,4615],{"className":4614,"style":3378},[491],[385,4616],{},[385,4618,4620],{"className":4619},[547],[385,4621,551],{"className":4622},[472,473],[385,4624,1723],{"className":4625},[406],[381,4627,4628,4629,4644,4645,920,4663,4678,4679,4703,4704,4719,4720,1723],{},"With ",[385,4630,4632],{"className":4631},[388],[385,4633,4635],{"className":4634,"ariaHidden":393},[392],[385,4636,4638,4641],{"className":4637},[397],[385,4639],{"className":4640,"style":402},[401],[385,4642,408],{"className":4643},[406,407]," rectangles there are ",[385,4646,4648],{"className":4647},[388],[385,4649,4651],{"className":4650,"ariaHidden":393},[392],[385,4652,4654,4657,4660],{"className":4653},[397],[385,4655],{"className":4656,"style":644},[401],[385,4658,514],{"className":4659},[406],[385,4661,408],{"className":4662},[406,407],[385,4664,4666],{"className":4665},[388],[385,4667,4669],{"className":4668,"ariaHidden":393},[392],[385,4670,4672,4675],{"className":4671},[397],[385,4673],{"className":4674,"style":402},[401],[385,4676,721],{"className":4677},[406,407],"-events and ",[385,4680,4682],{"className":4681},[388],[385,4683,4685],{"className":4684,"ariaHidden":393},[392],[385,4686,4688,4691,4694,4697,4700],{"className":4687},[397],[385,4689],{"className":4690,"style":840},[401],[385,4692,845],{"className":4693,"style":844},[406,407],[385,4695,474],{"className":4696},[466],[385,4698,408],{"className":4699},[406,407],[385,4701,551],{"className":4702},[547]," distinct ",[385,4705,4707],{"className":4706},[388],[385,4708,4710],{"className":4709,"ariaHidden":393},[392],[385,4711,4713,4716],{"className":4712},[397],[385,4714],{"className":4715,"style":668},[401],[385,4717,673],{"className":4718,"style":672},[406,407],"-values, so\nthe sweep runs in ",[385,4721,4723],{"className":4722},[388],[385,4724,4726],{"className":4725,"ariaHidden":393},[392],[385,4727,4729,4732,4735,4738,4741,4744,4750,4753,4756],{"className":4728},[397],[385,4730],{"className":4731,"style":840},[401],[385,4733,845],{"className":4734,"style":844},[406,407],[385,4736,474],{"className":4737},[466],[385,4739,408],{"className":4740},[406,407],[385,4742],{"className":4743,"style":888},[887],[385,4745,4747],{"className":4746},[877],[385,4748,883],{"className":4749,"style":882},[406,881],[385,4751],{"className":4752,"style":888},[887],[385,4754,408],{"className":4755},[406,407],[385,4757,551],{"className":4758},[547],[1269,4760,4762,4915],{"className":4761},[1272,1273],[1275,4763,4767],{"xmlns":1277,"width":4764,"height":4765,"viewBox":4766},"289.598","184.028","-75 -75 217.198 138.021",[1282,4768,4769,4773,4776,4779,4781,4783,4786,4789,4796,4799,4802,4809,4812,4821,4825,4872,4887,4901],{"stroke":1284,"style":1285},[1287,4770],{"fill":4771,"stroke":1289,"d":4772},"var(--tk-soft-accent)","M-50.726 54.48v-68.286h91.049v68.287Zm91.049-68.286",[1287,4774],{"fill":4771,"stroke":1289,"d":4775},"M-5.202 20.337v-68.286h91.05v68.286Zm91.05-68.286",[1287,4777],{"fill":4771,"stroke":1289,"d":4778},"M17.56 43.1V8.956h91.05V43.1Zm91.05-34.144",[1287,4780],{"fill":1289,"d":4772},[1287,4782],{"fill":1289,"d":4775},[1287,4784],{"fill":1289,"d":4785},"M17.56 43.1V8.956h91.05V43.1ZM-59.831 54.48h184.65",[1287,4787],{"stroke":1289,"d":4788},"m126.82 54.48-3.2-1.6 1.2 1.6-1.2 1.6",[1282,4790,4792],{"transform":4791},"translate(181.079 1.937)",[1287,4793],{"d":4794,"fill":1284,"stroke":1284,"className":4795,"style":1302},"M-49.997 54.191Q-49.821 54.318-49.548 54.318Q-49.258 54.318-49.045 54.064Q-48.832 53.809-48.753 53.492L-48.349 51.879Q-48.261 51.502-48.261 51.313Q-48.261 51.088-48.388 50.926Q-48.516 50.763-48.735 50.763Q-49.153 50.763-49.485 51.113Q-49.816 51.462-49.935 51.915Q-49.953 51.998-50.023 51.998L-50.133 51.998Q-50.221 51.998-50.221 51.879Q-50.089 51.339-49.667 50.921Q-49.245 50.504-48.718 50.504Q-48.384 50.504-48.109 50.675Q-47.834 50.847-47.720 51.141Q-47.562 50.869-47.316 50.686Q-47.070 50.504-46.784 50.504Q-46.446 50.504-46.173 50.671Q-45.901 50.838-45.901 51.159Q-45.901 51.387-46.044 51.556Q-46.186 51.726-46.424 51.726Q-46.564 51.726-46.670 51.633Q-46.775 51.541-46.775 51.396Q-46.775 51.211-46.652 51.069Q-46.529 50.926-46.345 50.891Q-46.525 50.763-46.802 50.763Q-47.092 50.763-47.303 51.020Q-47.514 51.277-47.593 51.594L-47.997 53.202Q-48.089 53.563-48.089 53.760Q-48.089 53.993-47.960 54.156Q-47.830 54.318-47.601 54.318Q-47.316 54.318-47.068 54.149Q-46.819 53.980-46.646 53.708Q-46.472 53.435-46.406 53.167Q-46.397 53.136-46.373 53.112Q-46.349 53.088-46.314 53.088L-46.208 53.088Q-46.169 53.088-46.143 53.125Q-46.116 53.163-46.116 53.202Q-46.204 53.549-46.424 53.868Q-46.643 54.187-46.960 54.384Q-47.276 54.582-47.619 54.582Q-47.957 54.582-48.232 54.413Q-48.507 54.244-48.630 53.940Q-48.779 54.209-49.028 54.395Q-49.276 54.582-49.557 54.582Q-49.900 54.582-50.174 54.415Q-50.449 54.248-50.449 53.923Q-50.449 53.699-50.300 53.527Q-50.150 53.356-49.917 53.356Q-49.772 53.356-49.669 53.448Q-49.566 53.541-49.566 53.690Q-49.566 53.866-49.689 54.013Q-49.812 54.160-49.997 54.191",[1301],[1287,4797],{"fill":1289,"d":4798},"M-59.831 54.48V-57.33",[1287,4800],{"stroke":1289,"d":4801},"m-59.831-59.33-1.6 3.2 1.6-1.2 1.6 1.2",[1282,4803,4805],{"transform":4804},"translate(-11.544 -119.094)",[1287,4806],{"d":4807,"fill":1284,"stroke":1284,"className":4808,"style":1302},"M-49.869 55.777Q-49.781 55.931-49.608 55.997Q-49.434 56.063-49.232 56.063Q-48.907 56.063-48.643 55.887Q-48.379 55.711-48.197 55.441Q-48.015 55.171-47.883 54.841Q-47.751 54.512-47.676 54.213Q-48.076 54.582-48.546 54.582Q-48.911 54.582-49.175 54.455Q-49.438 54.327-49.583 54.081Q-49.728 53.835-49.728 53.483Q-49.728 53.198-49.652 52.879Q-49.575 52.561-49.460 52.260Q-49.346 51.959-49.188 51.554Q-49.069 51.269-49.069 51.036Q-49.069 50.917-49.115 50.840Q-49.162 50.763-49.267 50.763Q-49.619 50.763-49.854 51.124Q-50.089 51.484-50.194 51.915Q-50.212 51.998-50.287 51.998L-50.392 51.998Q-50.440 51.998-50.462 51.959Q-50.484 51.919-50.484 51.879Q-50.396 51.537-50.236 51.231Q-50.076 50.926-49.825 50.715Q-49.575 50.504-49.249 50.504Q-48.911 50.504-48.680 50.710Q-48.450 50.917-48.450 51.260Q-48.450 51.440-48.511 51.594Q-48.542 51.682-48.694 52.077Q-48.845 52.473-48.915 52.703Q-48.986 52.934-49.032 53.158Q-49.078 53.382-49.078 53.606Q-49.078 53.905-48.948 54.112Q-48.819 54.318-48.538 54.318Q-47.962 54.318-47.531 53.624L-46.854 50.917Q-46.819 50.776-46.705 50.689Q-46.591 50.601-46.450 50.601Q-46.336 50.601-46.255 50.678Q-46.173 50.754-46.173 50.873Q-46.173 50.926-46.182 50.952L-47.061 54.499Q-47.188 54.986-47.514 55.404Q-47.839 55.821-48.296 56.074Q-48.753 56.327-49.241 56.327Q-49.491 56.327-49.722 56.237Q-49.953 56.147-50.095 55.966Q-50.238 55.786-50.238 55.536Q-50.238 55.285-50.091 55.107Q-49.944 54.929-49.711 54.929Q-49.566 54.929-49.463 55.022Q-49.359 55.114-49.359 55.263Q-49.359 55.465-49.511 55.621Q-49.663 55.777-49.869 55.777",[1301],[1287,4810],{"fill":1289,"stroke":1381,"d":4811,"style":1383},"M28.942 54.48V-59.33",[1282,4813,4814],{"fill":1381,"stroke":1381},[1282,4815,4817],{"transform":4816},"translate(72.325 -117.862)",[1287,4818],{"d":4819,"fill":1381,"stroke":1381,"className":4820,"style":1315},"M-50.445 54.473L-50.445 53.251Q-50.445 53.223-50.413 53.192Q-50.382 53.161-50.359 53.161L-50.253 53.161Q-50.183 53.161-50.167 53.223Q-50.105 53.544-49.966 53.784Q-49.828 54.024-49.595 54.165Q-49.363 54.305-49.054 54.305Q-48.816 54.305-48.607 54.245Q-48.398 54.184-48.261 54.036Q-48.124 53.887-48.124 53.641Q-48.124 53.387-48.335 53.221Q-48.546 53.055-48.816 53.001L-49.437 52.887Q-49.843 52.809-50.144 52.553Q-50.445 52.297-50.445 51.922Q-50.445 51.555-50.244 51.333Q-50.042 51.110-49.718 51.012Q-49.394 50.915-49.054 50.915Q-48.589 50.915-48.292 51.122L-48.070 50.938Q-48.046 50.915-48.015 50.915L-47.964 50.915Q-47.933 50.915-47.906 50.942Q-47.878 50.969-47.878 51.001L-47.878 51.985Q-47.878 52.016-47.904 52.045Q-47.929 52.075-47.964 52.075L-48.070 52.075Q-48.105 52.075-48.132 52.047Q-48.160 52.020-48.160 51.985Q-48.160 51.586-48.412 51.366Q-48.663 51.145-49.062 51.145Q-49.417 51.145-49.701 51.268Q-49.984 51.391-49.984 51.696Q-49.984 51.915-49.783 52.047Q-49.581 52.180-49.335 52.223L-48.710 52.336Q-48.281 52.426-47.972 52.723Q-47.663 53.020-47.663 53.434Q-47.663 54.004-48.062 54.282Q-48.460 54.559-49.054 54.559Q-49.605 54.559-49.956 54.223L-50.253 54.536Q-50.277 54.559-50.312 54.559L-50.359 54.559Q-50.382 54.559-50.413 54.528Q-50.445 54.497-50.445 54.473M-45.222 54.481L-47.054 54.481L-47.054 54.184Q-46.781 54.184-46.613 54.137Q-46.445 54.090-46.445 53.922L-46.445 49.762Q-46.445 49.547-46.507 49.452Q-46.570 49.356-46.689 49.335Q-46.808 49.313-47.054 49.313L-47.054 49.016L-45.831 48.930L-45.831 53.922Q-45.831 54.090-45.663 54.137Q-45.496 54.184-45.222 54.184L-45.222 54.481M-44.679 53.649Q-44.679 53.165-44.277 52.870Q-43.874 52.575-43.324 52.456Q-42.773 52.336-42.281 52.336L-42.281 52.047Q-42.281 51.821-42.396 51.614Q-42.511 51.407-42.708 51.288Q-42.906 51.169-43.136 51.169Q-43.562 51.169-43.847 51.274Q-43.777 51.301-43.730 51.356Q-43.683 51.411-43.658 51.481Q-43.632 51.551-43.632 51.626Q-43.632 51.731-43.683 51.823Q-43.734 51.915-43.826 51.965Q-43.917 52.016-44.023 52.016Q-44.128 52.016-44.220 51.965Q-44.312 51.915-44.363 51.823Q-44.413 51.731-44.413 51.626Q-44.413 51.208-44.025 51.061Q-43.636 50.915-43.136 50.915Q-42.804 50.915-42.451 51.045Q-42.097 51.176-41.869 51.430Q-41.640 51.684-41.640 52.032L-41.640 53.833Q-41.640 53.965-41.568 54.075Q-41.496 54.184-41.367 54.184Q-41.242 54.184-41.173 54.079Q-41.105 53.973-41.105 53.833L-41.105 53.321L-40.824 53.321L-40.824 53.833Q-40.824 54.036-40.941 54.194Q-41.058 54.352-41.240 54.436Q-41.421 54.520-41.624 54.520Q-41.855 54.520-42.007 54.348Q-42.160 54.176-42.191 53.946Q-42.351 54.227-42.660 54.393Q-42.968 54.559-43.320 54.559Q-43.831 54.559-44.255 54.336Q-44.679 54.114-44.679 53.649M-43.992 53.649Q-43.992 53.934-43.765 54.120Q-43.538 54.305-43.246 54.305Q-42.999 54.305-42.775 54.188Q-42.550 54.071-42.415 53.868Q-42.281 53.665-42.281 53.411L-42.281 52.579Q-42.546 52.579-42.831 52.633Q-43.117 52.688-43.388 52.817Q-43.660 52.946-43.826 53.153Q-43.992 53.360-43.992 53.649M-39.617 54.481L-39.898 54.481L-39.898 49.762Q-39.898 49.547-39.960 49.452Q-40.023 49.356-40.140 49.335Q-40.257 49.313-40.503 49.313L-40.503 49.016L-39.281 48.930L-39.281 51.419Q-38.804 50.954-38.105 50.954Q-37.624 50.954-37.216 51.198Q-36.808 51.442-36.572 51.856Q-36.335 52.270-36.335 52.754Q-36.335 53.129-36.484 53.458Q-36.632 53.786-36.902 54.038Q-37.171 54.290-37.515 54.424Q-37.859 54.559-38.218 54.559Q-38.538 54.559-38.837 54.411Q-39.136 54.262-39.343 54.001L-39.617 54.481M-39.257 51.809L-39.257 53.649Q-39.105 53.946-38.845 54.126Q-38.585 54.305-38.273 54.305Q-37.847 54.305-37.580 54.086Q-37.312 53.868-37.197 53.522Q-37.081 53.176-37.081 52.754Q-37.081 52.106-37.330 51.657Q-37.578 51.208-38.175 51.208Q-38.511 51.208-38.800 51.366Q-39.089 51.524-39.257 51.809",[1301],[1287,4822],{"fill":1289,"stroke":1381,"d":4823,"style":4824},"M28.942 54.48V-47.95","stroke-width:2.6",[1282,4826,4827],{"fill":1381,"stroke":1381},[1282,4828,4829,4836,4842,4848,4854,4860,4866],{"fill":1381,"stroke":1289,"fontSize":1389},[1282,4830,4832],{"transform":4831},"translate(88.892 -107.62)",[1287,4833],{"d":4834,"fill":1381,"stroke":1381,"className":4835,"style":1315},"M-50.445 52.754Q-50.445 52.258-50.195 51.833Q-49.945 51.407-49.525 51.161Q-49.105 50.915-48.605 50.915Q-48.066 50.915-47.675 51.040Q-47.285 51.165-47.285 51.579Q-47.285 51.684-47.335 51.776Q-47.386 51.868-47.478 51.919Q-47.570 51.969-47.679 51.969Q-47.785 51.969-47.876 51.919Q-47.968 51.868-48.019 51.776Q-48.070 51.684-48.070 51.579Q-48.070 51.356-47.902 51.251Q-48.124 51.192-48.597 51.192Q-48.894 51.192-49.109 51.331Q-49.324 51.469-49.455 51.700Q-49.585 51.930-49.644 52.200Q-49.703 52.469-49.703 52.754Q-49.703 53.149-49.570 53.499Q-49.437 53.848-49.165 54.065Q-48.894 54.282-48.496 54.282Q-48.121 54.282-47.845 54.065Q-47.570 53.848-47.468 53.489Q-47.453 53.426-47.390 53.426L-47.285 53.426Q-47.249 53.426-47.224 53.454Q-47.199 53.481-47.199 53.520L-47.199 53.544Q-47.331 54.024-47.716 54.292Q-48.101 54.559-48.605 54.559Q-48.968 54.559-49.302 54.422Q-49.636 54.286-49.896 54.036Q-50.156 53.786-50.300 53.450Q-50.445 53.114-50.445 52.754M-46.710 52.786Q-46.710 52.282-46.455 51.850Q-46.199 51.419-45.763 51.167Q-45.328 50.915-44.828 50.915Q-44.441 50.915-44.099 51.059Q-43.757 51.204-43.496 51.465Q-43.234 51.727-43.091 52.063Q-42.949 52.399-42.949 52.786Q-42.949 53.278-43.212 53.688Q-43.476 54.098-43.906 54.329Q-44.335 54.559-44.828 54.559Q-45.320 54.559-45.753 54.327Q-46.187 54.094-46.449 53.686Q-46.710 53.278-46.710 52.786M-44.828 54.282Q-44.371 54.282-44.119 54.059Q-43.867 53.836-43.779 53.485Q-43.691 53.133-43.691 52.688Q-43.691 52.258-43.785 51.920Q-43.878 51.583-44.132 51.376Q-44.386 51.169-44.828 51.169Q-45.476 51.169-45.720 51.585Q-45.964 52.001-45.964 52.688Q-45.964 53.133-45.876 53.485Q-45.788 53.836-45.537 54.059Q-45.285 54.282-44.828 54.282",[1301],[1282,4837,4838],{"transform":4831},[1287,4839],{"d":4840,"fill":1381,"stroke":1381,"className":4841,"style":1315},"M-40.896 54.450L-42.119 51.594Q-42.201 51.419-42.345 51.374Q-42.490 51.329-42.759 51.329L-42.759 51.032L-41.048 51.032L-41.048 51.329Q-41.470 51.329-41.470 51.512Q-41.470 51.547-41.455 51.594L-40.509 53.786L-39.669 51.809Q-39.630 51.731-39.630 51.641Q-39.630 51.501-39.736 51.415Q-39.841 51.329-39.982 51.329L-39.982 51.032L-38.630 51.032L-38.630 51.329Q-39.154 51.329-39.369 51.809L-40.494 54.450Q-40.556 54.559-40.662 54.559L-40.728 54.559Q-40.841 54.559-40.896 54.450",[1301],[1282,4843,4844],{"transform":4831},[1287,4845],{"d":4846,"fill":1381,"stroke":1381,"className":4847,"style":1315},"M-38.447 52.727Q-38.447 52.247-38.214 51.831Q-37.982 51.415-37.572 51.165Q-37.162 50.915-36.685 50.915Q-35.955 50.915-35.556 51.356Q-35.158 51.797-35.158 52.528Q-35.158 52.633-35.251 52.657L-37.701 52.657L-37.701 52.727Q-37.701 53.137-37.580 53.493Q-37.458 53.848-37.187 54.065Q-36.915 54.282-36.486 54.282Q-36.123 54.282-35.826 54.053Q-35.529 53.825-35.427 53.473Q-35.419 53.426-35.333 53.411L-35.251 53.411Q-35.158 53.438-35.158 53.520Q-35.158 53.528-35.165 53.559Q-35.228 53.786-35.367 53.969Q-35.505 54.153-35.697 54.286Q-35.888 54.419-36.107 54.489Q-36.326 54.559-36.564 54.559Q-36.935 54.559-37.273 54.422Q-37.611 54.286-37.878 54.034Q-38.146 53.782-38.296 53.442Q-38.447 53.102-38.447 52.727M-37.693 52.419L-35.732 52.419Q-35.732 52.114-35.833 51.823Q-35.935 51.532-36.152 51.350Q-36.369 51.169-36.685 51.169Q-36.986 51.169-37.216 51.356Q-37.447 51.544-37.570 51.835Q-37.693 52.126-37.693 52.419M-32.662 54.481L-34.642 54.481L-34.642 54.184Q-34.373 54.184-34.205 54.139Q-34.037 54.094-34.037 53.922L-34.037 51.786Q-34.037 51.571-34.099 51.475Q-34.162 51.379-34.279 51.358Q-34.396 51.336-34.642 51.336L-34.642 51.040L-33.474 50.954L-33.474 51.739Q-33.396 51.528-33.244 51.342Q-33.091 51.157-32.892 51.055Q-32.693 50.954-32.466 50.954Q-32.220 50.954-32.029 51.098Q-31.837 51.243-31.837 51.473Q-31.837 51.629-31.943 51.739Q-32.048 51.848-32.205 51.848Q-32.361 51.848-32.470 51.739Q-32.580 51.629-32.580 51.473Q-32.580 51.313-32.474 51.208Q-32.798 51.208-33.013 51.436Q-33.228 51.665-33.324 52.004Q-33.419 52.344-33.419 52.649L-33.419 53.922Q-33.419 54.090-33.193 54.137Q-32.966 54.184-32.662 54.184L-32.662 54.481M-31.357 52.727Q-31.357 52.247-31.124 51.831Q-30.892 51.415-30.482 51.165Q-30.072 50.915-29.595 50.915Q-28.865 50.915-28.466 51.356Q-28.068 51.797-28.068 52.528Q-28.068 52.633-28.162 52.657L-30.611 52.657L-30.611 52.727Q-30.611 53.137-30.490 53.493Q-30.369 53.848-30.097 54.065Q-29.826 54.282-29.396 54.282Q-29.033 54.282-28.736 54.053Q-28.439 53.825-28.337 53.473Q-28.330 53.426-28.244 53.411L-28.162 53.411Q-28.068 53.438-28.068 53.520Q-28.068 53.528-28.076 53.559Q-28.138 53.786-28.277 53.969Q-28.415 54.153-28.607 54.286Q-28.798 54.419-29.017 54.489Q-29.236 54.559-29.474 54.559Q-29.845 54.559-30.183 54.422Q-30.521 54.286-30.789 54.034Q-31.056 53.782-31.206 53.442Q-31.357 53.102-31.357 52.727M-30.603 52.419L-28.642 52.419Q-28.642 52.114-28.744 51.823Q-28.845 51.532-29.062 51.350Q-29.279 51.169-29.595 51.169Q-29.896 51.169-30.126 51.356Q-30.357 51.544-30.480 51.835Q-30.603 52.126-30.603 52.419M-25.763 54.559Q-26.244 54.559-26.652 54.315Q-27.060 54.071-27.298 53.657Q-27.537 53.243-27.537 52.754Q-27.537 52.262-27.279 51.846Q-27.021 51.430-26.589 51.192Q-26.158 50.954-25.665 50.954Q-25.044 50.954-24.595 51.391L-24.595 49.762Q-24.595 49.547-24.658 49.452Q-24.720 49.356-24.837 49.335Q-24.955 49.313-25.201 49.313L-25.201 49.016L-23.978 48.930L-23.978 53.739Q-23.978 53.950-23.915 54.045Q-23.853 54.141-23.736 54.163Q-23.619 54.184-23.369 54.184L-23.369 54.481L-24.619 54.559L-24.619 54.075Q-25.083 54.559-25.763 54.559M-25.697 54.305Q-25.357 54.305-25.064 54.114Q-24.771 53.922-24.619 53.626L-24.619 51.794Q-24.767 51.520-25.029 51.364Q-25.290 51.208-25.603 51.208Q-26.228 51.208-26.511 51.655Q-26.794 52.102-26.794 52.762Q-26.794 53.407-26.542 53.856Q-26.290 54.305-25.697 54.305",[1301],[1282,4849,4850],{"transform":4831},[1287,4851],{"d":4852,"fill":1381,"stroke":1381,"className":4853,"style":1315},"M-14.300 53.504L-19.613 53.504Q-19.691 53.497-19.740 53.448Q-19.788 53.399-19.788 53.321Q-19.788 53.251-19.741 53.200Q-19.695 53.149-19.613 53.137L-14.300 53.137Q-14.226 53.149-14.179 53.200Q-14.132 53.251-14.132 53.321Q-14.132 53.399-14.181 53.448Q-14.230 53.497-14.300 53.504M-14.300 51.817L-19.613 51.817Q-19.691 51.809-19.740 51.760Q-19.788 51.711-19.788 51.633Q-19.788 51.563-19.741 51.512Q-19.695 51.461-19.613 51.450L-14.300 51.450Q-14.226 51.461-14.179 51.512Q-14.132 51.563-14.132 51.633Q-14.132 51.711-14.181 51.760Q-14.230 51.809-14.300 51.817",[1301],[1282,4855,4856],{"transform":4831},[1287,4857],{"d":4858,"fill":1381,"stroke":1381,"className":4859,"style":1315},"M-8.808 53.169L-11.050 53.169L-11.050 52.872L-8.479 49.215Q-8.440 49.161-8.378 49.161L-8.233 49.161Q-8.183 49.161-8.151 49.192Q-8.120 49.223-8.120 49.274L-8.120 52.872L-7.288 52.872L-7.288 53.169L-8.120 53.169L-8.120 53.922Q-8.120 54.184-7.296 54.184L-7.296 54.481L-9.632 54.481L-9.632 54.184Q-8.808 54.184-8.808 53.922L-8.808 53.169M-8.753 50.067L-10.722 52.872L-8.753 52.872",[1301],[1282,4861,4862],{"transform":4831},[1287,4863],{"d":4864,"fill":1381,"stroke":1381,"className":4865,"style":1315},"M-6.319 54.016Q-6.319 53.833-6.183 53.696Q-6.046 53.559-5.854 53.559Q-5.663 53.559-5.530 53.692Q-5.397 53.825-5.397 54.016Q-5.397 54.215-5.530 54.348Q-5.663 54.481-5.854 54.481Q-6.046 54.481-6.183 54.344Q-6.319 54.208-6.319 54.016",[1301],[1282,4867,4868],{"transform":4831},[1287,4869],{"d":4870,"fill":1381,"stroke":1381,"className":4871,"style":1315},"M-3.837 53.602L-3.900 53.602Q-3.759 53.954-3.435 54.165Q-3.111 54.376-2.724 54.376Q-2.130 54.376-1.880 53.942Q-1.630 53.508-1.630 52.872Q-1.630 52.278-1.800 51.831Q-1.970 51.383-2.470 51.383Q-2.767 51.383-2.972 51.463Q-3.177 51.544-3.279 51.635Q-3.380 51.727-3.495 51.860Q-3.611 51.993-3.661 52.008L-3.732 52.008Q-3.818 51.985-3.837 51.907L-3.837 49.258Q-3.806 49.161-3.732 49.161Q-3.716 49.161-3.708 49.163Q-3.700 49.165-3.693 49.169Q-3.107 49.419-2.509 49.419Q-1.927 49.419-1.310 49.161L-1.286 49.161Q-1.243 49.161-1.216 49.186Q-1.189 49.211-1.189 49.251L-1.189 49.329Q-1.189 49.360-1.212 49.383Q-1.509 49.735-1.931 49.932Q-2.353 50.129-2.814 50.129Q-3.161 50.129-3.540 50.024L-3.540 51.520Q-3.322 51.325-3.046 51.227Q-2.771 51.129-2.470 51.129Q-2.013 51.129-1.644 51.377Q-1.275 51.626-1.068 52.030Q-0.861 52.434-0.861 52.879Q-0.861 53.368-1.116 53.776Q-1.372 54.184-1.804 54.417Q-2.236 54.649-2.724 54.649Q-3.118 54.649-3.474 54.458Q-3.829 54.266-4.040 53.932Q-4.251 53.598-4.251 53.184Q-4.251 53.004-4.134 52.891Q-4.017 52.778-3.837 52.778Q-3.720 52.778-3.628 52.831Q-3.536 52.883-3.484 52.975Q-3.431 53.067-3.431 53.184Q-3.431 53.368-3.544 53.485Q-3.657 53.602-3.837 53.602",[1301],[1282,4873,4874,4881],{"stroke":1289},[1282,4875,4877],{"transform":4876},"translate(17.478 -59.28)",[1287,4878],{"d":4879,"fill":1284,"stroke":1284,"className":4880,"style":1315},"M-48.101 54.481L-50.238 54.481Q-50.273 54.481-50.304 54.440Q-50.335 54.399-50.335 54.352L-50.312 54.251Q-50.300 54.200-50.214 54.184Q-49.773 54.184-49.615 54.145Q-49.456 54.106-49.413 53.879L-48.335 49.559Q-48.312 49.489-48.312 49.426Q-48.312 49.364-48.374 49.344Q-48.519 49.313-48.941 49.313Q-49.046 49.286-49.046 49.184L-49.015 49.083Q-49.007 49.036-48.925 49.016L-46.413 49.016Q-46.007 49.016-45.564 49.139Q-45.121 49.262-44.816 49.538Q-44.511 49.813-44.511 50.235Q-44.511 50.622-44.781 50.938Q-45.050 51.254-45.449 51.463Q-45.847 51.672-46.222 51.762Q-45.913 51.887-45.716 52.126Q-45.519 52.364-45.519 52.680Q-45.519 52.723-45.521 52.751Q-45.523 52.778-45.527 52.809L-45.605 53.504Q-45.636 53.794-45.636 53.915Q-45.636 54.129-45.568 54.260Q-45.499 54.391-45.292 54.391Q-45.038 54.391-44.843 54.167Q-44.648 53.942-44.581 53.665Q-44.574 53.618-44.488 53.602L-44.406 53.602Q-44.312 53.629-44.312 53.711Q-44.312 53.719-44.320 53.754Q-44.371 53.969-44.515 54.180Q-44.660 54.391-44.867 54.520Q-45.074 54.649-45.300 54.649Q-45.605 54.649-45.874 54.563Q-46.144 54.477-46.316 54.278Q-46.488 54.079-46.488 53.770Q-46.488 53.661-46.445 53.481L-46.269 52.786Q-46.246 52.665-46.246 52.571Q-46.246 52.235-46.507 52.053Q-46.769 51.872-47.132 51.872L-48.183 51.872L-48.703 53.938Q-48.718 54.032-48.718 54.075Q-48.718 54.114-48.705 54.127Q-48.691 54.141-48.656 54.153Q-48.511 54.184-48.085 54.184Q-47.992 54.211-47.992 54.305L-48.015 54.411Q-48.023 54.461-48.101 54.481M-47.621 49.618L-48.117 51.618L-47.175 51.618Q-46.831 51.618-46.515 51.549Q-46.199 51.481-45.925 51.313Q-45.738 51.188-45.601 50.987Q-45.464 50.786-45.396 50.553Q-45.328 50.321-45.328 50.098Q-45.328 49.641-45.695 49.477Q-46.062 49.313-46.597 49.313L-47.214 49.313Q-47.386 49.313-47.449 49.327Q-47.511 49.340-47.544 49.399Q-47.578 49.458-47.621 49.618",[1301],[1282,4882,4883],{"transform":4876},[1287,4884],{"d":4885,"fill":1284,"stroke":1284,"className":4886,"style":1322},"M-41.284 55.592L-43.575 55.592L-43.575 55.334Q-42.699 55.334-42.699 55.161L-42.699 52.082Q-42.892 52.170-43.124 52.207Q-43.355 52.243-43.610 52.243L-43.610 51.986Q-43.232 51.986-42.911 51.901Q-42.591 51.816-42.362 51.602L-42.242 51.602Q-42.210 51.602-42.185 51.625Q-42.160 51.649-42.160 51.687L-42.160 55.161Q-42.160 55.334-41.284 55.334",[1301],[1282,4888,4889,4895],{"stroke":1289},[1282,4890,4892],{"transform":4891},"translate(117.632 -88.871)",[1287,4893],{"d":4879,"fill":1284,"stroke":1284,"className":4894,"style":1315},[1301],[1282,4896,4897],{"transform":4891},[1287,4898],{"d":4899,"fill":1284,"stroke":1284,"className":4900,"style":1322},"M-41.284 55.592L-43.894 55.592L-43.894 55.407Q-43.888 55.384-43.868 55.358L-42.717 54.303Q-42.377 53.992-42.197 53.806Q-42.016 53.620-41.871 53.360Q-41.726 53.099-41.726 52.803Q-41.726 52.530-41.852 52.315Q-41.978 52.100-42.198 51.980Q-42.418 51.860-42.693 51.860Q-42.869 51.860-43.039 51.917Q-43.209 51.974-43.341 52.081Q-43.472 52.188-43.552 52.346Q-43.464 52.346-43.386 52.390Q-43.308 52.434-43.264 52.510Q-43.221 52.586-43.221 52.683Q-43.221 52.823-43.317 52.920Q-43.414 53.017-43.557 53.017Q-43.695 53.017-43.795 52.917Q-43.894 52.818-43.894 52.683Q-43.894 52.358-43.704 52.110Q-43.513 51.863-43.210 51.732Q-42.907 51.602-42.591 51.602Q-42.210 51.602-41.867 51.737Q-41.524 51.871-41.310 52.144Q-41.096 52.416-41.096 52.803Q-41.096 53.078-41.221 53.305Q-41.346 53.532-41.526 53.704Q-41.706 53.875-42.031 54.115Q-42.356 54.356-42.441 54.423L-43.197 55.027L-42.664 55.027Q-42.175 55.027-41.844 55.019Q-41.513 55.012-41.498 54.997Q-41.439 54.927-41.407 54.792Q-41.375 54.657-41.343 54.446L-41.096 54.446",[1301],[1282,4902,4903,4909],{"stroke":1289},[1282,4904,4906],{"transform":4905},"translate(144.947 -25.137)",[1287,4907],{"d":4879,"fill":1284,"stroke":1284,"className":4908,"style":1315},[1301],[1282,4910,4911],{"transform":4905},[1287,4912],{"d":4913,"fill":1284,"stroke":1284,"className":4914,"style":1322},"M-43.552 55.141Q-43.256 55.478-42.526 55.478Q-42.268 55.478-42.088 55.350Q-41.908 55.223-41.820 55.015Q-41.732 54.807-41.732 54.549Q-41.732 54.154-41.939 53.883Q-42.145 53.612-42.532 53.612L-42.998 53.612Q-43.062 53.597-43.077 53.535L-43.077 53.468Q-43.062 53.412-42.998 53.395L-42.596 53.371Q-42.386 53.371-42.217 53.229Q-42.049 53.087-41.956 52.873Q-41.864 52.659-41.864 52.443Q-41.864 52.155-42.049 51.990Q-42.233 51.824-42.526 51.824Q-42.787 51.824-43.011 51.892Q-43.235 51.959-43.382 52.117Q-43.253 52.135-43.174 52.224Q-43.095 52.314-43.095 52.443Q-43.095 52.580-43.190 52.675Q-43.285 52.771-43.426 52.771Q-43.560 52.771-43.657 52.674Q-43.754 52.577-43.754 52.443Q-43.754 52.155-43.563 51.964Q-43.373 51.772-43.092 51.687Q-42.810 51.602-42.526 51.602Q-42.251 51.602-41.950 51.693Q-41.650 51.783-41.442 51.972Q-41.234 52.161-41.234 52.443Q-41.234 52.812-41.480 53.084Q-41.726 53.357-42.098 53.486Q-41.679 53.579-41.362 53.862Q-41.044 54.145-41.044 54.543Q-41.044 54.906-41.263 55.172Q-41.483 55.437-41.829 55.577Q-42.175 55.718-42.526 55.718Q-42.749 55.718-42.996 55.670Q-43.244 55.621-43.464 55.511Q-43.683 55.402-43.815 55.223Q-43.947 55.044-43.947 54.789Q-43.947 54.640-43.845 54.537Q-43.742 54.435-43.593 54.435Q-43.443 54.435-43.341 54.537Q-43.238 54.640-43.238 54.789Q-43.238 54.921-43.327 55.022Q-43.417 55.123-43.552 55.141",[1301],[1414,4916,4918,4919,4934],{"className":4917},[1417],"Rectangle-union area: a vertical sweep accumulates covered ",[385,4920,4922],{"className":4921},[388],[385,4923,4925],{"className":4924,"ariaHidden":393},[392],[385,4926,4928,4931],{"className":4927},[397],[385,4929],{"className":4930,"style":668},[401],[385,4932,673],{"className":4933,"style":672},[406,407],"-length times slab width",[679,4936,4938],{"id":4937},"takeaways","Takeaways",[1140,4940,4941,5015,5116,5203,5342],{},[699,4942,2287,4943,4945,4946,4961,4962,4977,4978,4993,4994,4996,4997,4999,5000,1723],{},[610,4944,612],{}," paradigm reduces a ",[385,4947,4949],{"className":4948},[388],[385,4950,4952],{"className":4951,"ariaHidden":393},[392],[385,4953,4955,4958],{"className":4954},[397],[385,4956],{"className":4957,"style":644},[401],[385,4959,514],{"className":4960},[406],"-D geometry problem to a ",[385,4963,4965],{"className":4964},[388],[385,4966,4968],{"className":4967,"ariaHidden":393},[392],[385,4969,4971,4974],{"className":4970},[397],[385,4972],{"className":4973,"style":644},[401],[385,4975,628],{"className":4976},[406],"-D ordered-set\nproblem by advancing a vertical line through an ",[385,4979,4981],{"className":4980},[388],[385,4982,4984],{"className":4983,"ariaHidden":393},[392],[385,4985,4987,4990],{"className":4986},[397],[385,4988],{"className":4989,"style":402},[401],[385,4991,721],{"className":4992},[406,407],"-sorted ",[610,4995,704],{}," while a\n",[610,4998,733],{}," holds the objects crossing the line, ordered by ",[385,5001,5003],{"className":5002},[388],[385,5004,5006],{"className":5005,"ariaHidden":393},[392],[385,5007,5009,5012],{"className":5008},[397],[385,5010],{"className":5011,"style":668},[401],[385,5013,673],{"className":5014,"style":672},[406,407],[699,5016,5017,5018,5021,5022,5024,5025,5075,5076,5115],{},"The geometry is paid only ",[610,5019,5020],{},"at events"," and only against ",[610,5023,1194],{}," objects in\nthe status, turning ",[385,5026,5028],{"className":5027},[388],[385,5029,5031],{"className":5030,"ariaHidden":393},[392],[385,5032,5034,5037,5040,5043,5072],{"className":5033},[397],[385,5035],{"className":5036,"style":565},[401],[385,5038,569],{"className":5039},[406],[385,5041,474],{"className":5042},[466],[385,5044,5046,5049],{"className":5045},[406],[385,5047,408],{"className":5048},[406,407],[385,5050,5052],{"className":5051},[582],[385,5053,5055],{"className":5054},[482],[385,5056,5058],{"className":5057},[487],[385,5059,5061],{"className":5060,"style":592},[491],[385,5062,5063,5066],{"style":595},[385,5064],{"className":5065,"style":500},[499],[385,5067,5069],{"className":5068},[504,505,506,507],[385,5070,514],{"className":5071},[406,507],[385,5073,551],{"className":5074},[547]," all-pairs work into near-",[385,5077,5079],{"className":5078},[388],[385,5080,5082],{"className":5081,"ariaHidden":393},[392],[385,5083,5085,5088,5091,5094,5097,5100,5106,5109,5112],{"className":5084},[397],[385,5086],{"className":5087,"style":840},[401],[385,5089,845],{"className":5090,"style":844},[406,407],[385,5092,474],{"className":5093},[466],[385,5095,408],{"className":5096},[406,407],[385,5098],{"className":5099,"style":888},[887],[385,5101,5103],{"className":5102},[877],[385,5104,883],{"className":5105,"style":882},[406,881],[385,5107],{"className":5108,"style":888},[887],[385,5110,408],{"className":5111},[406,407],[385,5113,551],{"className":5114},[547]," sweeps.",[699,5117,5118,5121,5122,5137,5138,5198,5199,5202],{},[610,5119,5120],{},"Bentley–Ottmann"," reports all ",[385,5123,5125],{"className":5124},[388],[385,5126,5128],{"className":5127,"ariaHidden":393},[392],[385,5129,5131,5134],{"className":5130},[397],[385,5132],{"className":5133,"style":971},[401],[385,5135,976],{"className":5136,"style":975},[406,407]," segment crossings in ",[385,5139,5141],{"className":5140},[388],[385,5142,5144,5168],{"className":5143,"ariaHidden":393},[392],[385,5145,5147,5150,5153,5156,5159,5162,5165],{"className":5146},[397],[385,5148],{"className":5149,"style":840},[401],[385,5151,845],{"className":5152,"style":844},[406,407],[385,5154,1063],{"className":5155},[466],[385,5157,408],{"className":5158},[406,407],[385,5160],{"className":5161,"style":1070},[887],[385,5163,1075],{"className":5164},[1074],[385,5166],{"className":5167,"style":1070},[887],[385,5169,5171,5174,5177,5180,5183,5189,5192,5195],{"className":5170},[397],[385,5172],{"className":5173,"style":840},[401],[385,5175,976],{"className":5176,"style":975},[406,407],[385,5178,551],{"className":5179},[547],[385,5181],{"className":5182,"style":888},[887],[385,5184,5186],{"className":5185},[877],[385,5187,883],{"className":5188,"style":882},[406,881],[385,5190],{"className":5191,"style":888},[887],[385,5193,408],{"className":5194},[406,407],[385,5196,551],{"className":5197},[547],": events\nare endpoints plus discovered intersections, and the ",[610,5200,5201],{},"adjacency invariant"," means\nonly neighboring segments can next cross.",[699,5204,5205,5208,5209,5224,5225,5240,5241,5277,5278,5302,5303,1723],{},[610,5206,5207],{},"Closest pair"," sweeps a dynamic ",[385,5210,5212],{"className":5211},[388],[385,5213,5215],{"className":5214,"ariaHidden":393},[392],[385,5216,5218,5221],{"className":5217},[397],[385,5219],{"className":5220,"style":971},[401],[385,5222,2395],{"className":5223,"style":2394},[406,407],"-strip — a balanced ",[385,5226,5228],{"className":5227},[388],[385,5229,5231],{"className":5230,"ariaHidden":393},[392],[385,5232,5234,5237],{"className":5233},[397],[385,5235],{"className":5236,"style":668},[401],[385,5238,673],{"className":5239,"style":672},[406,407],"-set queried in a\n",[385,5242,5244],{"className":5243},[388],[385,5245,5247,5265],{"className":5246,"ariaHidden":393},[392],[385,5248,5250,5253,5256,5259,5262],{"className":5249},[397],[385,5251],{"className":5252,"style":2802},[401],[385,5254,2395],{"className":5255,"style":2394},[406,407],[385,5257],{"className":5258,"style":1070},[887],[385,5260,2812],{"className":5261},[1074],[385,5263],{"className":5264,"style":1070},[887],[385,5266,5268,5271,5274],{"className":5267},[397],[385,5269],{"className":5270,"style":971},[401],[385,5272,514],{"className":5273},[406],[385,5275,2395],{"className":5276,"style":2394},[406,407]," window holding ",[385,5279,5281],{"className":5280},[388],[385,5282,5284],{"className":5283,"ariaHidden":393},[392],[385,5285,5287,5290,5293,5296,5299],{"className":5286},[397],[385,5288],{"className":5289,"style":840},[401],[385,5291,845],{"className":5292,"style":844},[406,407],[385,5294,474],{"className":5295},[466],[385,5297,628],{"className":5298},[406],[385,5300,551],{"className":5301},[547]," points — for ",[385,5304,5306],{"className":5305},[388],[385,5307,5309],{"className":5308,"ariaHidden":393},[392],[385,5310,5312,5315,5318,5321,5324,5327,5333,5336,5339],{"className":5311},[397],[385,5313],{"className":5314,"style":840},[401],[385,5316,845],{"className":5317,"style":844},[406,407],[385,5319,474],{"className":5320},[466],[385,5322,408],{"className":5323},[406,407],[385,5325],{"className":5326,"style":888},[887],[385,5328,5330],{"className":5329},[877],[385,5331,883],{"className":5332,"style":882},[406,881],[385,5334],{"className":5335,"style":888},[887],[385,5337,408],{"className":5338},[406,407],[385,5340,551],{"className":5341},[547],[699,5343,5344,5346,5347,5383,5384,5387,5388,5391,5392,5395,5396,5399,5400,5391,5415,1723],{},[610,5345,3271],{}," use ",[385,5348,5350],{"className":5349},[388],[385,5351,5353,5374],{"className":5352,"ariaHidden":393},[392],[385,5354,5356,5359,5362,5365,5368,5371],{"className":5355},[397],[385,5357],{"className":5358,"style":840},[401],[385,5360,1075],{"className":5361},[406],[385,5363,3293],{"className":5364},[406],[385,5366],{"className":5367,"style":1070},[887],[385,5369,2667],{"className":5370},[1074],[385,5372],{"className":5373,"style":1070},[887],[385,5375,5377,5380],{"className":5376},[397],[385,5378],{"className":5379,"style":644},[401],[385,5381,628],{"className":5382},[406]," events: a running sum gives ",[610,5385,5386],{},"maximum\noverlap"," and coverage, a ",[610,5389,5390],{},"multiset"," gives the ",[610,5393,5394],{},"skyline",", and a ",[610,5397,5398],{},"segment tree","\nover compressed ",[385,5401,5403],{"className":5402},[388],[385,5404,5406],{"className":5405,"ariaHidden":393},[392],[385,5407,5409,5412],{"className":5408},[397],[385,5410],{"className":5411,"style":668},[401],[385,5413,673],{"className":5414,"style":672},[406,407],[610,5416,5417],{},"union of rectangle areas",[5419,5420,5423,5428],"section",{"className":5421,"dataFootnotes":376},[5422],"footnotes",[679,5424,5427],{"className":5425,"id":626},[5426],"sr-only","Footnotes",[696,5429,5430,5507,5519],{},[699,5431,5433,5436,5437,5452,5453,5492,5493,920,5500],{"id":5432},"user-content-fn-clrs-sweep",[610,5434,5435],{},"CLRS",", Ch. 33 — Computational Geometry (§33.2): the sweep with an event queue and a ",[385,5438,5440],{"className":5439},[388],[385,5441,5443],{"className":5442,"ariaHidden":393},[392],[385,5444,5446,5449],{"className":5445},[397],[385,5447],{"className":5448,"style":668},[401],[385,5450,673],{"className":5451,"style":672},[406,407],"-ordered status, and segment-intersection in ",[385,5454,5456],{"className":5455},[388],[385,5457,5459],{"className":5458,"ariaHidden":393},[392],[385,5460,5462,5465,5468,5471,5474,5477,5483,5486,5489],{"className":5461},[397],[385,5463],{"className":5464,"style":840},[401],[385,5466,845],{"className":5467,"style":844},[406,407],[385,5469,474],{"className":5470},[466],[385,5472,408],{"className":5473},[406,407],[385,5475],{"className":5476,"style":888},[887],[385,5478,5480],{"className":5479},[877],[385,5481,883],{"className":5482,"style":882},[406,881],[385,5484],{"className":5485,"style":888},[887],[385,5487,408],{"className":5488},[406,407],[385,5490,551],{"className":5491},[547],". ",[622,5494,5499],{"href":5495,"ariaLabel":5496,"className":5497,"dataFootnoteBackref":376},"#user-content-fnref-clrs-sweep","Back to reference 1",[5498],"data-footnote-backref","↩",[622,5501,5499,5505],{"href":5502,"ariaLabel":5503,"className":5504,"dataFootnoteBackref":376},"#user-content-fnref-clrs-sweep-2","Back to reference 1-2",[5498],[619,5506,514],{},[699,5508,5510,5513,5514],{"id":5509},"user-content-fn-skiena-sweep",[610,5511,5512],{},"Skiena",", § — Sweepline \u002F Geometry: plane-sweep as a general technique; events advance a status structure tracking active objects. ",[622,5515,5499],{"href":5516,"ariaLabel":5517,"className":5518,"dataFootnoteBackref":376},"#user-content-fnref-skiena-sweep","Back to reference 2",[5498],[699,5520,5522,5525,5526,5541,5542,5566,5567],{"id":5521},"user-content-fn-erickson-geom",[610,5523,5524],{},"Erickson",", Ch. — (geometry): closest-pair and the packing argument bounding a ",[385,5527,5529],{"className":5528},[388],[385,5530,5532],{"className":5531,"ariaHidden":393},[392],[385,5533,5535,5538],{"className":5534},[397],[385,5536],{"className":5537,"style":971},[401],[385,5539,2395],{"className":5540,"style":2394},[406,407],"-rectangle to ",[385,5543,5545],{"className":5544},[388],[385,5546,5548],{"className":5547,"ariaHidden":393},[392],[385,5549,5551,5554,5557,5560,5563],{"className":5550},[397],[385,5552],{"className":5553,"style":840},[401],[385,5555,845],{"className":5556,"style":844},[406,407],[385,5558,474],{"className":5559},[466],[385,5561,628],{"className":5562},[406],[385,5564,551],{"className":5565},[547]," points. ",[622,5568,5499],{"href":5569,"ariaLabel":5570,"className":5571,"dataFootnoteBackref":376},"#user-content-fnref-erickson-geom","Back to reference 3",[5498],[5573,5574,5575],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}html.dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}",{"title":376,"searchDepth":18,"depth":18,"links":5577},[5578,5579,5580,5581,5582,5583],{"id":681,"depth":18,"text":682},{"id":938,"depth":18,"text":939},{"id":2283,"depth":18,"text":2284},{"id":3270,"depth":18,"text":3271},{"id":4937,"depth":18,"text":4938},{"id":626,"depth":18,"text":5427},"A great many geometric problems share an awkward shape: they ask a question about\nn objects scattered in the plane whose answer seems to depend on every pair of\nobjects at once. Do any two of these n segments cross? What is the area covered\nby the union of these n rectangles? The brute-force answer compares all\n(2n​) pairs and costs Θ(n2). The plane-sweep paradigm\ndismantles that quadratic by refusing to look at the whole plane at once. Instead\nit imagines a vertical line sweeping steadily from left to right, and tracks only\nwhat is locally true at the line's current position.1","md",{"moduleNumber":333,"lessonNumber":24,"order":5587},1103,true,[5590,5594,5597,5600],{"title":5591,"slug":5592,"difficulty":5593},"The Skyline Problem","the-skyline-problem","Hard",{"title":5595,"slug":5596,"difficulty":5593},"Rectangle Area II","rectangle-area-ii",{"title":5598,"slug":5599,"difficulty":5593},"My Calendar III","my-calendar-iii",{"title":5601,"slug":5602,"difficulty":5603},"Describe the Painting","describe-the-painting","Medium","---\ntitle: Sweep-Line Algorithms\nmodule: Computational Geometry\nmoduleNumber: 11\nlessonNumber: 3\norder: 1103\nsummary: >-\n  The plane-sweep paradigm turns a static $2$-D geometry problem into a dynamic\n  $1$-D ordered-set problem: a vertical line sweeps left to right, stopping at an\n  $x$-sorted **event queue** while a balanced-BST **status structure** tracks the\n  objects it currently crosses, ordered by $y$. We derive Bentley–Ottmann segment\n  intersection in $O((n+k)\\log n)$, recover closest-pair in $O(n\\log n)$, and\n  reduce skyline, rectangle-area, and overlap problems to $\\pm1$ event sweeps.\ntopics: [Geometry]\nsources:\n  - book: CLRS\n    ref: \"Ch. 33 — Computational Geometry (§33.2 Segment intersection)\"\n  - book: Skiena\n    ref: \"§ — Sweepline \u002F Geometry\"\n  - book: Erickson\n    ref: \"Ch. — (geometry)\"\npractice:\n  - title: 'The Skyline Problem'\n    slug: the-skyline-problem\n    difficulty: Hard\n  - title: 'Rectangle Area II'\n    slug: rectangle-area-ii\n    difficulty: Hard\n  - title: 'My Calendar III'\n    slug: my-calendar-iii\n    difficulty: Hard\n  - title: 'Describe the Painting'\n    slug: describe-the-painting\n    difficulty: Medium\n---\n\nA great many geometric problems share an awkward shape: they ask a question about\n$n$ objects scattered in the plane whose answer seems to depend on _every pair_ of\nobjects at once. Do any two of these $n$ segments cross? What is the area covered\nby the union of these $n$ rectangles? The brute-force answer compares all\n$\\binom{n}{2}$ pairs and costs $\\Theta(n^2)$. The **plane-sweep** paradigm\ndismantles that quadratic by refusing to look at the whole plane at once. Instead\nit imagines a vertical line sweeping steadily from left to right, and tracks only\nwhat is _locally_ true at the line's current position.[^clrs-sweep]\n\nThe payoff is a recurring reduction: a hard $2$-D problem becomes a sequence of\ncheap updates to a _one-dimensional ordered set_. At any instant, the only objects\nthat matter are the ones the sweep line currently crosses, and among those, only\nthe ones _adjacent in $y$_ can interact. We have already built every tool this\nneeds: balanced BSTs and ordered sets from the [Balanced Trees](\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees) lesson,\nFenwick and segment trees from the structures that follow, and the sweep is the\nparadigm that puts them to geometric work.\n\n## The plane-sweep paradigm\n\nEvery sweep-line algorithm is assembled from two data structures and one loop.\n\n> **Remark (The two structures).**\n> 1. An **event queue**: the $x$-coordinates at which \"something happens\"\n>    (object endpoints, and, for intersection problems, computed crossing points),\n>    held in sorted order so we can pull the next event cheaply.\n> 2. A **status structure** (the _active set_): a balanced BST or ordered set\n>    holding exactly the objects the sweep line currently intersects, keyed by\n>    their $y$-coordinate **at the sweep line's $x$**. This $y$-order is the whole\n>    point: vertical neighbors in the status are spatial neighbors in the plane.\n\nThe loop is then uniform. Pop the leftmost event; it marks a _combinatorial\nchange_: an object enters the active set, an object leaves it, or two active\nobjects swap $y$-order. Update the status structure accordingly, inspect the few\nneighbors the change could affect, and emit any answers. Between events nothing\nin the active set changes order, so we never need to look there.[^skiena-sweep]\n\n> **Remark (Why this is fast).** There are $O(n)$ structural events (two per object), each\n> costing $O(\\log n)$ to process in a balanced status structure, and each event\n> touches only $O(1)$ _neighbours_. The geometry, the expensive part, is paid\n> only at events, and only against adjacent objects, never against all pairs.\n\nThe art in any specific problem is choosing _what counts as an event_ and _what\nthe status orders by_. The rest is bookkeeping.\n\n## Segment intersection: Bentley–Ottmann\n\nGiven $n$ line segments, report all $k$ pairs that cross. The naive test of every\npair is $\\Theta(n^2)$, wasteful when $k$ is small. The Bentley–Ottmann sweep does\nit in $O((n+k)\\log n)$ by exploiting a single geometric fact.[^clrs-sweep]\n\nSweep a vertical line left to right. The status structure holds the segments\ncurrently straddling the line, ordered by the $y$-coordinate at which each segment\nmeets the line. As the line advances this order is _stable_ except at three kinds\nof event:\n\n- **Left endpoint** of a segment: insert it into the status at its $y$-position.\n- **Right endpoint**: delete the segment from the status.\n- **Intersection point** of two segments: the two segments **swap** their relative\n  order in the status (the one that was above is now below).\n\nThe engine is the following invariant, which collapses the problem from all pairs\nto a constant check per event.\n\n> **Invariant (Adjacency).** Two segments can intersect only after they have become\n> _adjacent_ in the $y$-ordered status. Just before the crossing $x$, the two\n> segments meet at the same $y$ and so must be neighbors in the order.\n\nSo at each event we test only the handful of newly-adjacent pairs for a future\ncrossing, and any crossing we find is pushed into the event queue as a new event:\n\n- On **insert**, the new segment acquires an upper and a lower neighbor; test\n  each of those two pairs.\n- On **delete**, the departing segment's old neighbors become adjacent; test\n  that one new pair.\n- On a **swap**, the two swapping segments acquire new outer neighbors; test\n  those two new pairs.\n\n$$\n% caption: Maintain the $y$-ordered active set; at each event check only neighbors\n\\begin{tikzpicture}[\n  >=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  % axis\n  \\draw[->] (-0.3,0) -- (8.5,0) node[right] {$x$};\n  % event ticks on the x-axis\n  \\foreach \\x\u002F\\lab in {0.6\u002F{},2.1\u002F{},3.4\u002F{},5.6\u002F{},7.2\u002F{}}\n    \\draw (\\x,-0.12) -- (\\x,0.12);\n  \\node[font=\\footnotesize] at (0.6,-0.4) {$e_1$};\n  \\node[font=\\footnotesize] at (2.1,-0.4) {$e_2$};\n  \\node[font=\\footnotesize] at (3.4,-0.4) {$e_3$};\n  \\node[font=\\footnotesize] at (5.6,-0.4) {$e_4$};\n  \\node[font=\\footnotesize] at (7.2,-0.4) {$e_5$};\n  % the sweep line\n  \\draw[acc, very thick] (4.3,0) -- (4.3,4.3);\n  \\node[acc, font=\\footnotesize] at (4.3,4.6) {sweep};\n  % segments currently crossing the sweep line (active) -- accented\n  \\draw[acc, thick] (2.1,1.0) -- (7.2,2.3);\n  \\draw[acc, thick] (3.4,3.6) -- (6.4,1.4);\n  \\draw[acc, thick] (0.6,2.0) -- (5.6,3.4);\n  % a segment not yet reached \u002F already passed (inactive) -- plain\n  \\draw (5.6,0.5) -- (8.2,3.0);\n  \\draw (0.6,3.8) -- (2.6,4.1);\n  % mark crossings on the active set as small dots\n  \\fill (4.3,1.83) circle (1.3pt);\n  \\fill (4.3,2.6) circle (1.3pt);\n  \\fill (4.3,3.1) circle (1.3pt);\n\\end{tikzpicture}\n$$\n\nThe accented segments are exactly the active set; the sweep line meets them at\nthree $y$-values, and the status stores them in that vertical order. Because the\ntotal number of events is $n$ endpoints plus $k$ intersections, and each costs\n$O(\\log n)$ for the ordered-set operations, the total is $O((n+k)\\log n)$ — a\ndecisive win over $\\Theta(n^2)$ whenever $k = o(n^2\u002F\\log n)$.\n\nThe swap event is the subtle one. Two segments $s$ and $t$ are adjacent in the\nstatus, $s$ above $t$, until the sweep reaches their crossing $c$; at that $x$ they\nmeet at equal $y$, and just past it their order in the status flips — $t$ is now\nabove $s$. The swap exposes two _new_ adjacencies (the segment $u$ formerly outside\n$s$ now neighbors $t$, and the segment below $t$ now neighbors $s$), and those are\nthe only pairs worth testing next.\n\n$$\n% caption: At crossing $c$ the two segments swap status order, exposing two new\n%          adjacencies to test\n\\begin{tikzpicture}[\n  >=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  % LEFT panel: status order just BEFORE the crossing (s above t, not yet crossed)\n  \\node[font=\\footnotesize] at (1.5,3.5) {before $c$};\n  \\draw[black!55, thick] (0.2,3.0) -- (3.2,3.0) node[right, font=\\footnotesize, black] {$u$};\n  \\draw[acc, thick] (0.2,2.3) -- (3.2,1.65) node[right, font=\\footnotesize] {$s$};\n  \\draw[acc, thick] (0.2,0.6) -- (3.2,1.15) node[right, font=\\footnotesize] {$t$};\n  % sweep strictly LEFT of the crossing; s is genuinely above t here\n  \\draw[black!45, dashed] (1.4,0.2) -- (1.4,3.3);\n  \\node[black!55, font=\\footnotesize] at (1.4,-0.1) {sweep};\n  % crossing point c lies to the right, not yet reached\n  \\fill[red!75!black] (3.9,1.4) circle (1.6pt);\n  \\node[red!75!black, font=\\footnotesize] at (4.05,1.5) {$c$};\n  % arrow to the right panel\n  \\draw[->, black!55, thick] (4.2,1.8) -- (5.0,1.8);\n  % RIGHT panel: status order just AFTER the crossing (s and t swapped)\n  \\begin{scope}[xshift=5.4cm]\n    \\node[font=\\footnotesize] at (1.5,3.5) {after $c$};\n    \\draw[black!55, thick] (0.3,3.0) -- (3.2,3.0) node[right, font=\\footnotesize, black] {$u$};\n    \\draw[acc, thick] (0.3,1.3) -- (3.2,2.2) node[right, font=\\footnotesize] {$t$};\n    \\draw[acc, thick] (0.3,1.5) -- (3.2,0.7) node[right, font=\\footnotesize] {$s$};\n    % the two newly adjacent pairs to test\n    \\node[red!75!black, font=\\footnotesize, align=center] at (1.6,-0.25)\n      {new adjacencies:\\\\$(u,t)$ and $(s,\\text{below})$};\n  \\end{scope}\n\\end{tikzpicture}\n$$\n\n> **Lemma (correctness sketch).** Every crossing pair is reported. _Proof idea._\n> At the moment two segments cross they are equal in $y$, hence adjacent in the\n> status immediately before. Adjacency arises only at an event, and we test every\n> pair made adjacent at every event; so the pair is tested before its crossing is\n> reached, scheduled as an event, and reported when the sweep arrives. $\\qed$\n\nWe keep the implementation at this level: the careful part is degeneracy\n(vertical segments, three segments through a point) and reliable [orientation tests](\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives),\nwhich the references treat in full.\n\n## Closest pair, swept\n\nThe [Selection lesson](\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection) found the closest pair of $n$ points by divide-and-conquer\nin $O(n\\log n)$. A sweep gives the same bound with a different, often simpler,\nmechanism, and it generalizes the \"narrow strip\" trick of that proof into a\nrunning invariant.[^erickson-geom]\n\nSort the points by $x$ and sweep. Let $\\delta$ be the smallest distance found so\nfar. Keep the points whose $x$ lies within $\\delta$ of the sweep line in a balanced\nset **ordered by $y$**. When the sweep reaches a new point $p$:\n\n- Evict from the set every point more than $\\delta$ to the left of $p$ in $x$.\n- Among the survivors, only those within $\\delta$ of $p$ in $y$ can beat $\\delta$,\n  so query the set for the $y$-window $[\\,p_y - \\delta,\\; p_y + \\delta\\,]$.\n\n> **Remark (Why $O(1)$ comparisons per point).** The survivors lie in a $\\delta \\times\n> 2\\delta$ rectangle to the left of $p$. By the packing argument from the\n> closest-pair proof, any such rectangle holds $O(1)$ points (no two can be closer\n> than $\\delta$), so the $y$-window query returns a constant number of candidates.\n\nEach point triggers one insertion, $O(1)$ deletions amortized, and an $O(\\log n)$\nrange query returning $O(1)$ points to test — so $O(n\\log n)$ overall, dominated by\nthe initial sort. The sweep makes the strip _dynamic_: rather than recomputing a\nfresh strip at each recursion, it slides one along, inserting and evicting at the\nboundary.\n\n$$\n% caption: Closest pair: only the $\\delta\\times2\\delta$ box left of $p$ can beat $\\delta$,\n%          and it holds $O(1)$ points\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.4pt},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\fill[acc, opacity=0.08] (3.8,0) rectangle (5,4);\n  \\draw[acc, thick] (3.8,1.3) rectangle (5,3.7);\n  \\draw[acc, very thick] (5,0) -- (5,4.2);\n  \\node[acc, font=\\footnotesize] at (5,4.5) {sweep at $p_x$};\n  \\draw[->] (0.2,0) -- (6.2,0) node[right] {$x$};\n  \\node[dot, fill=acc, label={[fill=white, inner sep=1pt]right:$p$}] (p) at (5,2.5) {};\n  \\node[dot] (s1) at (4.3,2.0) {};\n  \\node[dot] (s2) at (4.0,3.2) {};\n  \\draw[dashed] (p) -- (s1);\n  \\draw[dashed] (p) -- (s2);\n  \\node[dot, fill=black!45, label=below:evicted] at (1.5,2.5) {};\n  \\draw[\u003C->] (3.8,-0.45) -- (5,-0.45);\n  \\node[font=\\footnotesize] at (4.4,-0.8) {$\\delta$};\n  \\draw[\u003C->] (5.25,1.3) -- (5.25,3.7);\n  \\node[font=\\footnotesize] at (5.55,2.5) {$2\\delta$};\n\\end{tikzpicture}\n$$\n\n## Interval and rectangle sweeps\n\nThe practice problems are sweeps in disguise, and they reveal a simpler status\nstructure than a full BST: when objects are axis-aligned, events are $+1\u002F-1$\n_deltas_ and the status is a count or a segment tree.\n\n**Maximum overlap (My Calendar III, Describe the Painting).** Given intervals\n$[\\ell_i, r_i)$, find the maximum number covering any point — or the coverage\nprofile. Emit a $+1$ event at each $\\ell_i$ and a $-1$ event at each $r_i$, sort\nthe events by coordinate, and sweep a running sum. The running sum _is_ the number\nof intervals covering the current coordinate; its maximum is the answer.\n\n```algorithm\ncaption: $\\textsc{Max-Overlap}(\\{[\\ell_i, r_i)\\})$ — sweep $\\pm1$ events\n$E \\gets \\varnothing$\nfor each interval $[\\ell_i, r_i)$ do\n  add event $(\\ell_i, +1)$ to $E$       \u002F\u002F begins\n  add event $(r_i, -1)$ to $E$          \u002F\u002F ends\nsort $E$ by coordinate; break ties with $-1$ before $+1$\n$cur \\gets 0;\\ best \\gets 0$\nfor each event $(x, \\delta)$ in $E$ do\n  $cur \\gets cur + \\delta$\n  $best \\gets \\max(best, cur)$\nreturn $best$\n```\n\nThe tie-break matters: at a shared coordinate, ending an interval before starting\nthe next reflects half-open $[\\ell, r)$ intervals and avoids spuriously counting an\nendpoint touch as an overlap. To _describe_ the painting rather than only its peak,\nemit a coverage segment between consecutive distinct event coordinates whenever\n$cur > 0$, merging equal-$cur$ neighbors. The sweep costs $O(n\\log n)$ for the\nsort and $O(n)$ for the pass.\n\n$$\n% caption: Sweep $\\pm1$ events to track coverage; the peak is the max overlap\n\\begin{tikzpicture}[\n  >=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  % three stacked intervals on a timeline\n  \\draw (1,3.0) -- (5,3.0);  \\node[font=\\footnotesize] at (0.6,3.0) {$A$};\n  \\draw (2,2.5) -- (6.5,2.5); \\node[font=\\footnotesize] at (1.6,2.5) {$B$};\n  \\draw (3,2.0) -- (4.5,2.0); \\node[font=\\footnotesize] at (2.6,2.0) {$C$};\n  % +1\u002F-1 markers at the endpoints\n  \\node[font=\\footnotesize] at (1,3.3) {$+1$};\n  \\node[font=\\footnotesize] at (5,3.3) {$-1$};\n  \\node[font=\\footnotesize] at (2,2.8) {$+1$};\n  \\node[font=\\footnotesize] at (6.5,2.8) {$-1$};\n  \\node[font=\\footnotesize] at (3,2.3) {$+1$};\n  \\node[font=\\footnotesize] at (4.5,2.3) {$-1$};\n  % timeline axis\n  \\draw[->] (0.5,0) -- (7.2,0) node[right] {$x$};\n  \\foreach \\x in {1,2,3,4.5,5,6.5} \\draw (\\x,-0.1) -- (\\x,0.1);\n  % running coverage step function beneath\n  \\draw[thick] (1,0.4) -- (2,0.4) -- (2,0.8) -- (3,0.8) -- (3,1.2)\n        -- (4.5,1.2) -- (4.5,0.8) -- (5,0.8) -- (5,0.4) -- (6.5,0.4) -- (6.5,0);\n  % highlight the peak coverage segment\n  \\draw[acc, very thick] (3,1.2) -- (4.5,1.2);\n  \\node[acc, font=\\footnotesize] at (3.75,1.5) {$cur=3$};\n\\end{tikzpicture}\n$$\n\n**Skyline.** Given $n$ buildings as $(\\ell, r, h)$, output the silhouette of their\nunion. Sweep $x$-events at building edges; the status is a **multiset of active\nheights**. At a left edge insert $h$; at a right edge remove it. After each event\nthe current skyline height is the multiset's maximum, and a key point is emitted\nwhenever that maximum changes. A balanced multiset (or a heap with lazy deletion)\ngives $O(n\\log n)$.\n\n**Union of rectangle areas (Rectangle Area II).** Sweep a vertical line across\n$x$-events at rectangle left and right edges. The status tracks, for the current\n$x$-slab, the total _length_ of $y$ covered by at least one active rectangle. Each\nrectangle contributes a $+1\u002F-1$ on its $y$-interval at its left\u002Fright edge; a\n**segment tree over compressed $y$-coordinates** maintains the covered length under\nthese interval updates in $O(\\log n)$ each, exactly the coordinate-compressed\nsegment tree from the [Fenwick & Segment Trees](\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees) lesson. The area is the sum over\nslabs of (covered $y$-length) $\\times$ (slab width):\n\n$$\n\\text{area} \\;=\\; \\sum_{\\text{slabs}} \\operatorname{covered}_y(\\text{slab}) \\cdot \\bigl(x_{i+1} - x_i\\bigr).\n$$\n\nWith $n$ rectangles there are $2n$ $x$-events and $O(n)$ distinct $y$-values, so\nthe sweep runs in $O(n\\log n)$.\n\n$$\n% caption: Rectangle-union area: a vertical sweep accumulates covered $y$-length times\n%          slab width\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  >=stealth, scale=0.8]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\fill[acc!15] (0,0) rectangle (4,3);\n  \\fill[acc!15] (2,1.5) rectangle (6,4.5);\n  \\fill[acc!15] (3,0.5) rectangle (7,2);\n  \\draw (0,0) rectangle (4,3);\n  \\draw (2,1.5) rectangle (6,4.5);\n  \\draw (3,0.5) rectangle (7,2);\n  \\draw[->] (-0.4,0) -- (7.8,0) node[right] {$x$};\n  \\draw[->] (-0.4,0) -- (-0.4,5.0) node[above] {$y$};\n  \\draw[acc, very thick] (3.5,0) -- (3.5,5.0);\n  \\node[acc, font=\\footnotesize] at (3.5,5.3) {slab};\n  \\draw[acc, line width=2.6pt] (3.5,0) -- (3.5,4.5);\n  \\node[acc, font=\\footnotesize, anchor=west] at (3.75,4.85) {covered $=4.5$};\n  \\node[font=\\footnotesize] at (1.0,2.7) {$R_1$};\n  \\node[font=\\footnotesize] at (5.4,4.0) {$R_2$};\n  \\node[font=\\footnotesize] at (6.6,1.2) {$R_3$};\n\\end{tikzpicture}\n$$\n\n## Takeaways\n\n- The **plane-sweep** paradigm reduces a $2$-D geometry problem to a $1$-D ordered-set\n  problem by advancing a vertical line through an $x$-sorted **event queue** while a\n  **status structure** holds the objects crossing the line, ordered by $y$.\n- The geometry is paid only **at events** and only against **adjacent** objects in\n  the status, turning $\\Theta(n^2)$ all-pairs work into near-$O(n\\log n)$ sweeps.\n- **Bentley–Ottmann** reports all $k$ segment crossings in $O((n+k)\\log n)$: events\n  are endpoints plus discovered intersections, and the **adjacency invariant** means\n  only neighboring segments can next cross.\n- **Closest pair** sweeps a dynamic $\\delta$-strip — a balanced $y$-set queried in a\n  $\\delta\\times2\\delta$ window holding $O(1)$ points — for $O(n\\log n)$.\n- **Interval and rectangle sweeps** use $+1\u002F-1$ events: a running sum gives **maximum\n  overlap** and coverage, a **multiset** gives the **skyline**, and a **segment tree**\n  over compressed $y$ gives the **union of rectangle areas**.\n\n[^clrs-sweep]: **CLRS**, Ch. 33 — Computational Geometry (§33.2): the sweep with an event queue and a $y$-ordered status, and segment-intersection in $O(n\\log n)$.\n[^skiena-sweep]: **Skiena**, § — Sweepline \u002F Geometry: plane-sweep as a general technique; events advance a status structure tracking active objects.\n[^erickson-geom]: **Erickson**, Ch. — (geometry): closest-pair and the packing argument bounding a $\\delta$-rectangle to $O(1)$ points.\n",{"text":5606,"minutes":5607,"time":5608,"words":5609},"9 min read",8.15,489000,1630,{"title":348,"description":5584},[5612,5614,5616],{"book":5435,"ref":5613},"Ch. 33 — Computational Geometry (§33.2 Segment intersection)",{"book":5512,"ref":5615},"§ — Sweepline \u002F Geometry",{"book":5524,"ref":5617},"Ch. — (geometry)","available","01.algorithms\u002F11.computational-geometry\u002F03.sweep-line",[340],"A0YrFuw4MycgTPzQFlSCBU17mvxPmHUlfqOLIm9we5w",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":5623,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":5624,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":5625,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":5626,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":5627,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":5628,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":5629,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":5630,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":5631,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":5632,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":5633,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":5634,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":5635,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":5636,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":5637,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":5638,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":5639,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":5640,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":5641,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":5642,"\u002Falgorithms\u002Fsequences\u002Ftries":5643,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":5644,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":5645,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":5646,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":5647,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":5648,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":5649,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":5650,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":5651,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":5652,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":5653,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":5654,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":5655,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":5656,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":5657,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":5658,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":5659,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":5660,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":5661,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":5662,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":5663,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":5664,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":5665,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":5666,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":5667,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":5668,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":5669,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":5639,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":5670,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":5671,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":5672,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":5673,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":5655,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":5609,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":5674,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":5635,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":5675,"\u002Falgorithms":5676,"\u002Ftheory-of-computation":5677,"\u002Fcomputer-architecture":5677,"\u002Fphysical-computing":5677,"\u002Fdatabases":5677,"\u002Fdeep-learning":5677},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1791,1481,2704,1658,2070,1978,2080,1568,1451,1291,1543,1883,1443,1599,2038,2241,1744,1678,2288,1929,1657,1412,1554,1418,1713,1798,1694,1762,1534,1595,1262,1495,2306,2142,107,0,{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":5679,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":5680,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":5681,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":5682,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":5683,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":5684,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":5685,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":5686,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":5687,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":5688,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":5689,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":5690,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":5691,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":5692,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":5693,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":5694,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":5695,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":5696,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":5697,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":5698,"\u002Falgorithms\u002Fsequences\u002Ftries":5699,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":5700,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":5701,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":5702,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":5703,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":5704,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":5705,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":5706,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":5707,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":5708,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":5709,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":5710,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":5711,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":5712,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":5713,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":5714,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":5715,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":5716,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":5717,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":5718,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":5719,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":5720,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":5721,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":5722,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":5723,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":5724,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":5725,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":5726,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":5727,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":5728,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":5729,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":5730,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":5731,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":5732,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":5733,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":5734,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":5735,"\u002Falgorithms":5736,"\u002Ftheory-of-computation":5739,"\u002Fcomputer-architecture":5742,"\u002Fphysical-computing":5745,"\u002Fdatabases":5748,"\u002Fdeep-learning":5751},{"path":11,"title":10,"module":5,"summary":14},{"path":17,"title":16,"module":5,"summary":20},{"path":23,"title":22,"module":5,"summary":27},{"path":34,"title":33,"module":29,"summary":37},{"path":40,"title":39,"module":29,"summary":43},{"path":46,"title":45,"module":29,"summary":49},{"path":56,"title":55,"module":51,"summary":59},{"path":62,"title":61,"module":51,"summary":64},{"path":67,"title":66,"module":51,"summary":70},{"path":78,"title":77,"module":72,"summary":81},{"path":84,"title":83,"module":72,"summary":87},{"path":90,"title":89,"module":72,"summary":92},{"path":95,"title":94,"module":72,"summary":98},{"path":101,"title":100,"module":72,"summary":104},{"path":107,"title":106,"module":72,"summary":112},{"path":115,"title":114,"module":72,"summary":119},{"path":126,"title":125,"module":121,"summary":129},{"path":132,"title":131,"module":121,"summary":134},{"path":137,"title":136,"module":121,"summary":140},{"path":143,"title":142,"module":121,"summary":146},{"path":149,"title":148,"module":121,"summary":151},{"path":158,"title":157,"module":153,"summary":162},{"path":165,"title":164,"module":153,"summary":167},{"path":170,"title":169,"module":153,"summary":172},{"path":175,"title":174,"module":153,"summary":177},{"path":180,"title":179,"module":153,"summary":182},{"path":185,"title":184,"module":153,"summary":187},{"path":190,"title":189,"module":153,"summary":192},{"path":195,"title":194,"module":153,"summary":198},{"path":201,"title":200,"module":153,"summary":204},{"path":211,"title":210,"module":206,"summary":213},{"path":216,"title":215,"module":206,"summary":219},{"path":222,"title":221,"module":206,"summary":224},{"path":227,"title":226,"module":206,"summary":229},{"path":236,"title":235,"module":231,"summary":238},{"path":241,"title":240,"module":231,"summary":244},{"path":247,"title":246,"module":231,"summary":249},{"path":252,"title":251,"module":231,"summary":254},{"path":257,"title":256,"module":231,"summary":259},{"path":262,"title":261,"module":231,"summary":264},{"path":267,"title":266,"module":231,"summary":269},{"path":272,"title":271,"module":231,"summary":274},{"path":277,"title":276,"module":231,"summary":279},{"path":282,"title":281,"module":231,"summary":285},{"path":292,"title":291,"module":287,"summary":295},{"path":298,"title":297,"module":287,"summary":300},{"path":303,"title":302,"module":287,"summary":305},{"path":312,"title":311,"module":307,"summary":315},{"path":318,"title":317,"module":307,"summary":320},{"path":323,"title":322,"module":307,"summary":325},{"path":328,"title":327,"module":307,"summary":330},{"path":338,"title":337,"module":332,"summary":341},{"path":344,"title":343,"module":332,"summary":346},{"path":349,"title":348,"module":332,"summary":351},{"path":359,"title":358,"module":353,"summary":362},{"path":364,"title":361,"module":353,"summary":366},{"path":369,"title":368,"module":353,"summary":373},{"path":5737,"title":5738,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":5740,"title":5741,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":5743,"title":5744,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":5746,"title":5747,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":5749,"title":5750,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":5752,"title":5753,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781560528403]