[
  {
    "code": "MINIMUMEUCLIDEANDISTANCE",
    "title": "Minimum Euclidean Distance",
    "full_title": "Minimum Euclidean Distance",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2194/",
    "main_topic": "Advanced -> Algorithm Engineering",
    "secondary_topics": [
      "Closest pair",
      "Sweep line",
      "Ordered active set"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "advanced/algorithm-engineering",
    "topic_tags": [
      "advanced/algorithm-engineering",
      "geometry/sweep-line"
    ],
    "patterns": [
      "closest pair sweep line",
      "active strip by x distance",
      "ordered set by y"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/advanced/algorithm-engineering/minimumeuclideandistance.md",
    "ladder_path": "practice/ladders/advanced/algorithm-engineering/README.md",
    "tutorial_path": "topics/advanced/algorithm-engineering/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/algorithm-engineering/minimumeuclideandistance.cpp"
  },
  {
    "code": "BUILDTHEPERMUTATION",
    "title": "Build the Permutation",
    "full_title": "Build the Permutation",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/1608/B",
    "main_topic": "Advanced -> Constructive",
    "secondary_topics": [
      "Alternating pattern",
      "Local extrema counting",
      "Case split construction"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/constructive",
    "topic_tags": [
      "advanced/constructive"
    ],
    "patterns": [
      "alternating core construction",
      "local extrema counting",
      "monotone leftover tail"
    ],
    "tracks": [
      "Codeforces",
      "Constructive"
    ],
    "note_path": "practice/ladders/advanced/constructive/buildthepermutation.md",
    "ladder_path": "practice/ladders/advanced/constructive/README.md",
    "tutorial_path": "topics/advanced/constructive/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/constructive/buildthepermutation.cpp"
  },
  {
    "code": "VMCOINS",
    "title": "Trò chơi với những đồng xu",
    "full_title": "VMCOINS - Trò chơi với những đồng xu",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VMCOINS/",
    "main_topic": "Advanced -> Constructive",
    "secondary_topics": [
      "Promise-driven search",
      "Translation matching",
      "State BFS"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "advanced/constructive",
    "topic_tags": [
      "advanced/constructive",
      "geometry/vector-orientation"
    ],
    "patterns": [
      "promise-driven constructive",
      "translation matching",
      "small residual search"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/advanced/constructive/vmcoins.md",
    "ladder_path": "practice/ladders/advanced/constructive/README.md",
    "tutorial_path": "topics/advanced/constructive/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/constructive/vmcoins.cpp"
  },
  {
    "code": "LINEARREGRESSIONGD",
    "title": "Linear Regression Gradient Descent Benchmark",
    "full_title": "Linear Regression Gradient Descent Benchmark",
    "judge": "Canonical first-order optimization benchmark",
    "judge_url": "https://cs229.stanford.edu/summer2020/cs229-notes1.pdf",
    "main_topic": "Advanced -> Gradient Descent",
    "secondary_topics": [
      "Batch gradient descent",
      "Squared loss",
      "Linear regression"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/gradient-descent",
    "topic_tags": [
      "advanced/gradient-descent"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/gradient-descent/linearregressiongd.md",
    "ladder_path": "practice/ladders/advanced/gradient-descent/README.md",
    "tutorial_path": "topics/advanced/gradient-descent/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/gradient-descent/linearregressiongd.cpp"
  },
  {
    "code": "PERCEPTRONCLASSIFICATION",
    "title": "Perceptron Classification Benchmark",
    "full_title": "Perceptron Classification Benchmark",
    "judge": "Canonical perceptron benchmark",
    "judge_url": "https://cs229.stanford.edu/notes2021fall/cs229-notes6.pdf",
    "main_topic": "Advanced -> Machine Learning Algorithms",
    "secondary_topics": [
      "Perceptron",
      "Linear separability",
      "Online updates"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/machine-learning-algorithms",
    "topic_tags": [
      "advanced/machine-learning-algorithms"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/machine-learning-algorithms/perceptronclassification.md",
    "ladder_path": "practice/ladders/advanced/machine-learning-algorithms/README.md",
    "tutorial_path": "topics/advanced/machine-learning-algorithms/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/machine-learning-algorithms/perceptronclassification.cpp"
  },
  {
    "code": "PICKYOUROWNNIM",
    "title": "Pick Your Own Nim",
    "full_title": "Pick Your Own Nim",
    "judge": "Codeforces Gym",
    "judge_url": "https://codeforces.com/gym/102156/problem/D",
    "main_topic": "Advanced -> Matroid Intersection",
    "secondary_topics": [
      "Linear matroid",
      "Partition matroid",
      "XOR basis"
    ],
    "difficulty": "very-hard",
    "status": "solved",
    "primary_slug": "advanced/matroid-intersection",
    "topic_tags": [
      "advanced/matroid-intersection"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/matroid-intersection/pickyourownnim.md",
    "ladder_path": "practice/ladders/advanced/matroid-intersection/README.md",
    "tutorial_path": "topics/advanced/matroid-intersection/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/matroid-intersection/pickyourownnim.cpp"
  },
  {
    "code": "MEETINTHEMIDDLE",
    "title": "Meet in the Middle",
    "full_title": "Meet in the Middle",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1628",
    "main_topic": "Advanced -> Meet-In-The-Middle",
    "secondary_topics": [
      "Subset sums",
      "Sort + equal_range",
      "Exact search"
    ],
    "difficulty": "medium-hard",
    "status": "solved",
    "primary_slug": "advanced/meet-in-the-middle",
    "topic_tags": [
      "advanced/meet-in-the-middle"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/meet-in-the-middle/meetinthemiddle.md",
    "ladder_path": "practice/ladders/advanced/meet-in-the-middle/README.md",
    "tutorial_path": "topics/advanced/meet-in-the-middle/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/meet-in-the-middle/meetinthemiddle.cpp"
  },
  {
    "code": "SKIRENTAL",
    "title": "Ski Rental",
    "full_title": "Ski Rental",
    "judge": "Canonical online-algorithms benchmark",
    "judge_url": "https://www.cs.jhu.edu/~mdinitz/classes/IntroAlgorithms/Fall2021/Lectures/Lecture24/lecture24slides.pdf",
    "main_topic": "Advanced -> Online Algorithms",
    "secondary_topics": [
      "Competitive ratio",
      "Threshold policy",
      "Adversarial future"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/online-algorithms",
    "topic_tags": [
      "advanced/online-algorithms"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/online-algorithms/skirental.md",
    "ladder_path": "practice/ladders/advanced/online-algorithms/README.md",
    "tutorial_path": "topics/advanced/online-algorithms/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/online-algorithms/skirental.cpp"
  },
  {
    "code": "PARALLELPREFIXSUM",
    "title": "Parallel Prefix Sum Benchmark",
    "full_title": "Parallel Prefix Sum Benchmark",
    "judge": "Canonical parallel scan benchmark",
    "judge_url": "https://www.cs.cmu.edu/afs/cs/academic/class/15451-s14/www/LectureNotes/PrefixSumBlelloch.pdf",
    "main_topic": "Advanced -> Parallel Algorithms",
    "secondary_topics": [
      "Blelloch scan",
      "Work / span",
      "PRAM"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/parallel-algorithms",
    "topic_tags": [
      "advanced/parallel-algorithms"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/parallel-algorithms/parallelprefixsum.md",
    "ladder_path": "practice/ladders/advanced/parallel-algorithms/README.md",
    "tutorial_path": "topics/advanced/parallel-algorithms/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/parallel-algorithms/parallelprefixsum.cpp"
  },
  {
    "code": "DEUTSCHJOZSA",
    "title": "Deutsch-Jozsa Oracle Benchmark",
    "full_title": "Deutsch-Jozsa Oracle Benchmark",
    "judge": "Canonical quantum promise-problem benchmark",
    "judge_url": "https://ocw.mit.edu/courses/6-845-quantum-complexity-theory-fall-2010/resources/mit6_845f10_lec05/",
    "main_topic": "Advanced -> Quantum Algorithms",
    "secondary_topics": [
      "Deutsch-Jozsa",
      "Phase oracle",
      "Hadamard transform"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "advanced/quantum-algorithms",
    "topic_tags": [
      "advanced/quantum-algorithms"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/quantum-algorithms/deutschjozsa.md",
    "ladder_path": "practice/ladders/advanced/quantum-algorithms/README.md",
    "tutorial_path": "topics/advanced/quantum-algorithms/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/quantum-algorithms/deutschjozsa.cpp"
  },
  {
    "code": "CHEESEIFYOUPLEASE",
    "title": "Cheese, If You Please",
    "full_title": "Cheese, If You Please",
    "judge": "Kattis",
    "judge_url": "https://open.kattis.com/problems/cheeseifyouplease",
    "main_topic": "Advanced -> Simplex",
    "secondary_topics": [
      "Linear programming",
      "Simplex",
      "Resource allocation"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "advanced/simplex",
    "topic_tags": [
      "advanced/simplex"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/advanced/simplex/cheeseifyouplease.md",
    "ladder_path": "practice/ladders/advanced/simplex/README.md",
    "tutorial_path": "topics/advanced/simplex/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/advanced/simplex/cheeseifyouplease.cpp"
  },
  {
    "code": "VOSFENCE",
    "title": "Xay hang rao",
    "full_title": "Xay hang rao",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VOSFENCE/",
    "main_topic": "Combinatorics -> Bounded Compositions",
    "secondary_topics": [
      "Run counting",
      "DP counting",
      "Stars and bars with upper bounds"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "combinatorics/bounded-compositions",
    "topic_tags": [
      "combinatorics/bounded-compositions",
      "combinatorics/counting-basics",
      "combinatorics/inclusion-exclusion"
    ],
    "patterns": [
      "bounded compositions",
      "run decomposition",
      "gap distribution"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/combinatorics/bounded-compositions/vosfence.md",
    "ladder_path": "practice/ladders/combinatorics/bounded-compositions/README.md",
    "tutorial_path": "topics/combinatorics/bounded-compositions/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/combinatorics/bounded-compositions/vosfence.cpp"
  },
  {
    "code": "COUNTINGNECKLACES",
    "title": "Counting Necklaces",
    "full_title": "Counting Necklaces",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2209",
    "main_topic": "Combinatorics -> Burnside / Pólya / Group Actions",
    "secondary_topics": [
      "Burnside lemma",
      "Rotation symmetry",
      "Modular arithmetic"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "combinatorics/burnside-polya",
    "topic_tags": [
      "combinatorics/burnside-polya",
      "math/modular-arithmetic"
    ],
    "patterns": [
      "burnside lemma",
      "rotation symmetry",
      "orbit counting"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/combinatorics/burnside-polya/countingnecklaces.md",
    "ladder_path": "practice/ladders/combinatorics/burnside-polya/README.md",
    "tutorial_path": "topics/combinatorics/burnside-polya/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/combinatorics/burnside-polya/countingnecklaces.cpp"
  },
  {
    "code": "DISTRIBUTINGAPPLES",
    "title": "Distributing Apples",
    "full_title": "Distributing Apples",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1716",
    "main_topic": "Combinatorics -> Counting Basics",
    "secondary_topics": [
      "Stars and bars",
      "Binomial coefficients",
      "Modular arithmetic"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "combinatorics/counting-basics",
    "topic_tags": [
      "combinatorics/counting-basics",
      "math/modular-arithmetic"
    ],
    "patterns": [
      "stars and bars",
      "single binomial query",
      "factorial precompute"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/combinatorics/counting-basics/distributingapples.md",
    "ladder_path": "practice/ladders/combinatorics/counting-basics/README.md",
    "tutorial_path": "topics/combinatorics/counting-basics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/combinatorics/counting-basics/distributingapples.cpp"
  },
  {
    "code": "PRIMEMULTIPLES",
    "title": "Prime Multiples",
    "full_title": "Prime Multiples",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2185",
    "main_topic": "Combinatorics -> Inclusion-Exclusion",
    "secondary_topics": [
      "Subset enumeration",
      "LCM reasoning",
      "Overflow guards"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "combinatorics/inclusion-exclusion",
    "topic_tags": [
      "combinatorics/inclusion-exclusion",
      "math/number-theory-basics"
    ],
    "patterns": [
      "subset inclusion exclusion",
      "overflow safe lcm product",
      "count divisible numbers"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/combinatorics/inclusion-exclusion/primemultiples.md",
    "ladder_path": "practice/ladders/combinatorics/inclusion-exclusion/README.md",
    "tutorial_path": "topics/combinatorics/inclusion-exclusion/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/combinatorics/inclusion-exclusion/primemultiples.cpp"
  },
  {
    "code": "VOITSORT",
    "title": "Cây hoán vị",
    "full_title": "Cây hoán vị",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/VOITSORT/",
    "main_topic": "Combinatorics -> Lexicographic Enumeration",
    "secondary_topics": [
      "Cartesian tree",
      "Stack-sortable permutations",
      "Next permutation"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "combinatorics/lexicographic-enumeration",
    "topic_tags": [
      "combinatorics/lexicographic-enumeration",
      "graphs/trees"
    ],
    "patterns": [
      "lexicographic enumeration",
      "stack-sortability",
      "cartesian tree view"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/combinatorics/lexicographic-enumeration/voitsort.md",
    "ladder_path": "practice/ladders/combinatorics/lexicographic-enumeration/README.md",
    "tutorial_path": "topics/combinatorics/lexicographic-enumeration/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/combinatorics/lexicographic-enumeration/voitsort.cpp"
  },
  {
    "code": "BTREEDICTIONARY",
    "title": "B-Tree Dictionary",
    "full_title": "B-Tree Dictionary",
    "judge": "Canonical B-tree dictionary benchmark",
    "judge_url": "https://opendatastructures.org/ods-cpp/14_2_B_Trees.html",
    "main_topic": "Data Structures -> B-Trees",
    "secondary_topics": [
      "Multiway search tree",
      "Split full child",
      "High fanout"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/b-trees",
    "topic_tags": [
      "data-structures/b-trees"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/b-trees/btreedictionary.md",
    "ladder_path": "practice/ladders/data-structures/b-trees/README.md",
    "tutorial_path": "topics/data-structures/b-trees/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/b-trees/btreedictionary.cpp"
  },
  {
    "code": "VASILIYSMULTISET",
    "title": "Vasiliy's Multiset",
    "full_title": "Vasiliy's Multiset",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/706/D",
    "main_topic": "Data Structures -> Binary Trie / XOR Queries",
    "secondary_topics": [
      "Binary trie",
      "Maximum xor query",
      "Dynamic multiset"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/binary-trie-xor",
    "topic_tags": [
      "data-structures/binary-trie-xor"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/binary-trie-xor/vasiliysmultiset.md",
    "ladder_path": "practice/ladders/data-structures/binary-trie-xor/README.md",
    "tutorial_path": "topics/data-structures/binary-trie-xor/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/binary-trie-xor/vasiliysmultiset.cpp"
  },
  {
    "code": "C11XU",
    "title": "Bộ sưu tập đồng xu",
    "full_title": "C11XU - Bộ sưu tập đồng xu",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/C11XU/",
    "main_topic": "Data Structures -> DSU",
    "secondary_topics": [
      "Graphic matroid",
      "Forest independence",
      "Augmenting path"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/dsu",
    "topic_tags": [
      "data-structures/dsu",
      "advanced/optimization-and-duality"
    ],
    "patterns": [
      "xor-independence",
      "forest selection",
      "augmenting exchange"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/data-structures/dsu/c11xu.md",
    "ladder_path": "practice/ladders/data-structures/dsu/README.md",
    "tutorial_path": "topics/data-structures/dsu/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/dsu/c11xu.cpp"
  },
  {
    "code": "DISTINCTCOLORS",
    "title": "Distinct Colors",
    "full_title": "Distinct Colors",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1139/",
    "main_topic": "Data Structures -> DSU On Tree / Small-To-Large",
    "secondary_topics": [
      "Tree traversal",
      "Frequency maps",
      "Subtree distinct count"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/dsu-on-tree",
    "topic_tags": [
      "data-structures/dsu-on-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/dsu-on-tree/distinctcolors.md",
    "ladder_path": "practice/ladders/data-structures/dsu-on-tree/README.md",
    "tutorial_path": "topics/data-structures/dsu-on-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/dsu-on-tree/distinctcolors.cpp"
  },
  {
    "code": "DYNAMICCONNECTIVITY",
    "title": "Dynamic Connectivity",
    "full_title": "Dynamic Connectivity",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2133",
    "main_topic": "Data Structures -> DSU Rollback / Offline Dynamic Connectivity",
    "secondary_topics": [
      "DSU rollback",
      "Segment tree over time",
      "Offline dynamic connectivity"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/dsu-rollback",
    "topic_tags": [
      "data-structures/dsu-rollback",
      "data-structures/dsu",
      "data-structures/offline-tricks"
    ],
    "patterns": [
      "dsu rollback",
      "segment tree over time",
      "offline dynamic connectivity"
    ],
    "tracks": [
      "CSES",
      "Advanced techniques"
    ],
    "note_path": "practice/ladders/data-structures/dsu-rollback/dynamicconnectivity.md",
    "ladder_path": "practice/ladders/data-structures/dsu-rollback/README.md",
    "tutorial_path": "topics/data-structures/dsu-rollback/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/dsu-rollback/dynamicconnectivity.cpp"
  },
  {
    "code": "CVP00001",
    "title": "Ô ăn quan",
    "full_title": "Ô ăn quan",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/CVP00001/",
    "main_topic": "Data Structures -> Fenwick Tree",
    "secondary_topics": [
      "Simulation",
      "Circular range updates",
      "Judge edge cases"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/fenwick-tree",
    "topic_tags": [
      "data-structures/fenwick-tree",
      "foundations/prefix-sums"
    ],
    "patterns": [
      "circular updates",
      "range-add point-query",
      "query-from-initial-state"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/data-structures/fenwick-tree/cvp00001.md",
    "ladder_path": "practice/ladders/data-structures/fenwick-tree/README.md",
    "tutorial_path": "topics/data-structures/fenwick-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/fenwick-tree/cvp00001.cpp"
  },
  {
    "code": "CONCERTTICKETS",
    "title": "Concert Tickets",
    "full_title": "Concert Tickets",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1091",
    "main_topic": "Data Structures -> Heaps And Ordered Sets",
    "secondary_topics": [
      "Multiset predecessor",
      "Erase one occurrence",
      "Greedy matching"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/heaps-and-ordered-sets",
    "topic_tags": [
      "data-structures/heaps-and-ordered-sets"
    ],
    "patterns": [
      "multiset predecessor",
      "erase one occurrence",
      "greedy ticket assignment"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/data-structures/heaps-and-ordered-sets/concerttickets.md",
    "ladder_path": "practice/ladders/data-structures/heaps-and-ordered-sets/README.md",
    "tutorial_path": "topics/data-structures/heaps-and-ordered-sets/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/heaps-and-ordered-sets/concerttickets.cpp"
  },
  {
    "code": "RESERVATIONSYSTEM",
    "title": "Reservation System",
    "full_title": "Reservation System",
    "judge": "AOJ 0360",
    "judge_url": "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0360",
    "main_topic": "Data Structures -> Interval Trees",
    "secondary_topics": [
      "Half-open intervals",
      "Interval overlap",
      "Augmented BST"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "data-structures/interval-trees",
    "topic_tags": [
      "data-structures/interval-trees"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/interval-trees/reservationsystem.md",
    "ladder_path": "practice/ladders/data-structures/interval-trees/README.md",
    "tutorial_path": "topics/data-structures/interval-trees/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/interval-trees/reservationsystem.cpp"
  },
  {
    "code": "HORRIBLEQUERIES",
    "title": "Horrible Queries",
    "full_title": "HORRIBLE - Horrible Queries",
    "judge": "SPOJ",
    "judge_url": "https://www.spoj.com/problems/HORRIBLE/",
    "main_topic": "Data Structures -> Lazy Segment Tree",
    "secondary_topics": [
      "Range add",
      "Range sum",
      "Lazy propagation"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/lazy-segment-tree",
    "topic_tags": [
      "data-structures/lazy-segment-tree"
    ],
    "patterns": [
      "lazy segment tree",
      "range add range sum",
      "deferred propagation"
    ],
    "tracks": [
      "SPOJ",
      "Range queries"
    ],
    "note_path": "practice/ladders/data-structures/lazy-segment-tree/horriblequeries.md",
    "ladder_path": "practice/ladders/data-structures/lazy-segment-tree/README.md",
    "tutorial_path": "topics/data-structures/lazy-segment-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/lazy-segment-tree/horriblequeries.cpp"
  },
  {
    "code": "NEARESTSMALLERVALUES",
    "title": "Nearest Smaller Values",
    "full_title": "Nearest Smaller Values",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1645",
    "main_topic": "Data Structures -> Monotonic Stack / Queue",
    "secondary_topics": [
      "Monotonic stack",
      "Previous smaller",
      "Boundary scan"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/monotonic-stack-queue",
    "topic_tags": [
      "data-structures/monotonic-stack-queue"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/monotonic-stack-queue/nearestsmallervalues.md",
    "ladder_path": "practice/ladders/data-structures/monotonic-stack-queue/README.md",
    "tutorial_path": "topics/data-structures/monotonic-stack-queue/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/monotonic-stack-queue/nearestsmallervalues.cpp"
  },
  {
    "code": "POWERFULARRAY",
    "title": "Powerful Array",
    "full_title": "Powerful Array",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/86/D",
    "main_topic": "Data Structures -> Mo's Algorithm",
    "secondary_topics": [
      "Mo's Algorithm",
      "Frequency maintenance",
      "Offline range queries"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/mos-algorithm",
    "topic_tags": [
      "data-structures/mos-algorithm"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/mos-algorithm/powerfularray.md",
    "ladder_path": "practice/ladders/data-structures/mos-algorithm/README.md",
    "tutorial_path": "topics/data-structures/mos-algorithm/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/mos-algorithm/powerfularray.cpp"
  },
  {
    "code": "WILLEMCHTHOLLYANDSENIORIOUS",
    "title": "Willem, Chtholly and Seniorious",
    "full_title": "896C - Willem, Chtholly and Seniorious",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/896/C?mobile=true",
    "main_topic": "Data Structures -> ODT / Chtholly",
    "secondary_topics": [
      "ODT",
      "Range assign",
      "Ordered set",
      "Expected complexity"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/odt-chtholly",
    "topic_tags": [
      "data-structures/odt-chtholly"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/odt-chtholly/willemchthollyandseniorious.md",
    "ladder_path": "practice/ladders/data-structures/odt-chtholly/README.md",
    "tutorial_path": "topics/data-structures/odt-chtholly/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/odt-chtholly/willemchthollyandseniorious.cpp"
  },
  {
    "code": "DISTINCTVALUESQUERIES",
    "title": "Distinct Values Queries",
    "full_title": "Distinct Values Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1734",
    "main_topic": "Data Structures -> Offline Tricks",
    "secondary_topics": [
      "Offline sweep by right endpoint",
      "Fenwick tree",
      "Last occurrence"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/offline-tricks",
    "topic_tags": [
      "data-structures/offline-tricks",
      "data-structures/fenwick-tree"
    ],
    "patterns": [
      "offline right-endpoint sweep",
      "last occurrence activation",
      "fenwick range count"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/data-structures/offline-tricks/distinctvaluesqueries.md",
    "ladder_path": "practice/ladders/data-structures/offline-tricks/README.md",
    "tutorial_path": "topics/data-structures/offline-tricks/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/offline-tricks/distinctvaluesqueries.cpp"
  },
  {
    "code": "MERGEABLEHEAP1",
    "title": "P3377 [Template] Mergeable Heap 1",
    "full_title": "P3377 [Template] Mergeable Heap 1",
    "judge": "Luogu",
    "judge_url": "https://www.luogu.com.cn/problem/P3377",
    "main_topic": "Data Structures -> Pairing Heap / Leftist Heap",
    "secondary_topics": [
      "Leftist heap",
      "Meldable heap",
      "DSU"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/pairing-leftist-heap",
    "topic_tags": [
      "data-structures/pairing-leftist-heap"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/pairing-leftist-heap/mergeableheap1.md",
    "ladder_path": "practice/ladders/data-structures/pairing-leftist-heap/README.md",
    "tutorial_path": "topics/data-structures/pairing-leftist-heap/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/pairing-leftist-heap/mergeableheap1.cpp"
  },
  {
    "code": "ORDERSET",
    "title": "Order Statistic Set",
    "full_title": "ORDERSET - Order Statistic Set",
    "judge": "SPOJ",
    "judge_url": "https://www.spoj.com/problems/ORDERSET/",
    "main_topic": "Data Structures -> PBDS / Order Statistics Tree",
    "secondary_topics": [
      "PBDS",
      "Ordered set",
      "k-th smallest",
      "count smaller"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/pbds-order-statistics",
    "topic_tags": [
      "data-structures/pbds-order-statistics"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/pbds-order-statistics/orderset.md",
    "ladder_path": "practice/ladders/data-structures/pbds-order-statistics/README.md",
    "tutorial_path": "topics/data-structures/pbds-order-statistics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/pbds-order-statistics/orderset.cpp"
  },
  {
    "code": "RANGEQUERIESANDCOPIES",
    "title": "Range Queries and Copies",
    "full_title": "Range Queries and Copies",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1737",
    "main_topic": "Data Structures -> Persistent Data Structures",
    "secondary_topics": [
      "Persistent segment tree",
      "Path copying",
      "Versioned queries"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/persistent-data-structures",
    "topic_tags": [
      "data-structures/persistent-data-structures",
      "data-structures/segment-tree"
    ],
    "patterns": [
      "persistent segment tree",
      "path copying",
      "versioned range sum"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/data-structures/persistent-data-structures/rangequeriesandcopies.md",
    "ladder_path": "practice/ladders/data-structures/persistent-data-structures/README.md",
    "tutorial_path": "topics/data-structures/persistent-data-structures/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/persistent-data-structures/rangequeriesandcopies.cpp"
  },
  {
    "code": "PERSISTENTLIST",
    "title": "Persistent List",
    "full_title": "Persistent List",
    "judge": "E-olymp",
    "judge_url": "https://eolymp.com/en/problems/2957",
    "main_topic": "Data Structures -> Persistent Treap",
    "secondary_topics": [
      "Persistent treap",
      "Implicit treap",
      "Split / merge persistence",
      "Branching list versions"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/persistent-treap",
    "topic_tags": [
      "data-structures/persistent-treap"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/persistent-treap/persistentlist.md",
    "ladder_path": "practice/ladders/data-structures/persistent-treap/README.md",
    "tutorial_path": "topics/data-structures/persistent-treap/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/persistent-treap/persistentlist.cpp"
  },
  {
    "code": "DYNAMICRANGESUMQUERIES",
    "title": "Dynamic Range Sum Queries",
    "full_title": "Dynamic Range Sum Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1648",
    "main_topic": "Data Structures -> Segment Tree",
    "secondary_topics": [
      "Point update",
      "Range sum",
      "Iterative segment tree"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/segment-tree",
    "topic_tags": [
      "data-structures/segment-tree"
    ],
    "patterns": [
      "iterative segment tree",
      "point assignment",
      "range sum query"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/data-structures/segment-tree/dynamicrangesumqueries.md",
    "ladder_path": "practice/ladders/data-structures/segment-tree/README.md",
    "tutorial_path": "topics/data-structures/segment-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/segment-tree/dynamicrangesumqueries.cpp"
  },
  {
    "code": "RANGECHMINCHMAXADDRANGESUM",
    "title": "Range Chmin Chmax Add Range Sum",
    "full_title": "Range Chmin Chmax Add Range Sum",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/range_chmin_chmax_add_range_sum",
    "main_topic": "Data Structures -> Segment Tree Beats",
    "secondary_topics": [
      "Segment Tree Beats",
      "Range chmin",
      "Range chmax"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/segment-tree-beats",
    "topic_tags": [
      "data-structures/segment-tree-beats"
    ],
    "patterns": [
      "segment tree beats",
      "range chmin",
      "range chmax",
      "second extremum summaries"
    ],
    "tracks": [
      "Library Checker",
      "Verification"
    ],
    "note_path": "practice/ladders/data-structures/segment-tree-beats/rangechminchmaxaddrangesum.md",
    "ladder_path": "practice/ladders/data-structures/segment-tree-beats/README.md",
    "tutorial_path": "topics/data-structures/segment-tree-beats/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/segment-tree-beats/rangechminchmaxaddrangesum.cpp"
  },
  {
    "code": "SKIPLISTDICTIONARY",
    "title": "Skiplist Dictionary",
    "full_title": "Skiplist Dictionary",
    "judge": "Canonical skiplist dictionary benchmark",
    "judge_url": "https://opendatastructures.org/ods-cpp/4_Skiplists.html",
    "main_topic": "Data Structures -> Skip Lists",
    "secondary_topics": [
      "Probabilistic balancing",
      "Forward-pointer towers",
      "Expected logarithmic search"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/skip-lists",
    "topic_tags": [
      "data-structures/skip-lists"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/skip-lists/skiplistdictionary.md",
    "ladder_path": "practice/ladders/data-structures/skip-lists/README.md",
    "tutorial_path": "topics/data-structures/skip-lists/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/skip-lists/skiplistdictionary.cpp"
  },
  {
    "code": "STATICRANGEMINIMUMQUERIES",
    "title": "Static Range Minimum Queries",
    "full_title": "Static Range Minimum Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1647",
    "main_topic": "Data Structures -> Sparse Table",
    "secondary_topics": [
      "Idempotent queries",
      "Overlapping blocks",
      "Log-table preprocessing"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "data-structures/sparse-table",
    "topic_tags": [
      "data-structures/sparse-table"
    ],
    "patterns": [
      "sparse table rmq",
      "idempotent overlap query",
      "log table preprocessing"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/data-structures/sparse-table/staticrangeminimumqueries.md",
    "ladder_path": "practice/ladders/data-structures/sparse-table/README.md",
    "tutorial_path": "topics/data-structures/sparse-table/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/sparse-table/staticrangeminimumqueries.cpp"
  },
  {
    "code": "ORDINARYBALANCEDTREE",
    "title": "普通平衡树",
    "full_title": "普通平衡树",
    "judge": "Luogu",
    "judge_url": "https://www.luogu.com.cn/problem/P3369",
    "main_topic": "Data Structures -> Splay Tree",
    "secondary_topics": [
      "Splay tree",
      "Ordered multiset",
      "Rank",
      "k-th"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/splay-tree",
    "topic_tags": [
      "data-structures/splay-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/splay-tree/ordinarybalancedtree.md",
    "ladder_path": "practice/ladders/data-structures/splay-tree/README.md",
    "tutorial_path": "topics/data-structures/splay-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/splay-tree/ordinarybalancedtree.cpp"
  },
  {
    "code": "CUTANDPASTE",
    "title": "Cut and Paste",
    "full_title": "Cut and Paste",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2072",
    "main_topic": "Data Structures -> Treap / Implicit Treap",
    "secondary_topics": [
      "Implicit treap",
      "Split/merge sequence surgery",
      "Subtree size as position"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/treap-implicit",
    "topic_tags": [
      "data-structures/treap-implicit"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/treap-implicit/cutandpaste.md",
    "ladder_path": "practice/ladders/data-structures/treap-implicit/README.md",
    "tutorial_path": "topics/data-structures/treap-implicit/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/treap-implicit/cutandpaste.cpp"
  },
  {
    "code": "SALARYQUERIES",
    "title": "Salary Queries",
    "full_title": "Salary Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1144",
    "main_topic": "Data Structures -> Treap / Implicit Treap",
    "secondary_topics": [
      "Key-based treap",
      "Order statistics",
      "Pair-key wrapper",
      "Dynamic range count"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "data-structures/treap-implicit",
    "topic_tags": [
      "data-structures/treap-implicit"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/treap-implicit/salaryqueries.md",
    "ladder_path": "practice/ladders/data-structures/treap-implicit/README.md",
    "tutorial_path": "topics/data-structures/treap-implicit/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/treap-implicit/salaryqueries.cpp"
  },
  {
    "code": "MKTHNUM",
    "title": "K-th Number",
    "full_title": "MKTHNUM - K-th Number",
    "judge": "SPOJ",
    "judge_url": "https://www.spoj.com/problems/MKTHNUM/",
    "main_topic": "Data Structures -> Wavelet Tree",
    "secondary_topics": [
      "Wavelet tree",
      "Static order statistics",
      "Coordinate compression"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/wavelet-tree",
    "topic_tags": [
      "data-structures/wavelet-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/wavelet-tree/mkthnum.md",
    "ladder_path": "practice/ladders/data-structures/wavelet-tree/README.md",
    "tutorial_path": "topics/data-structures/wavelet-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/wavelet-tree/mkthnum.cpp"
  },
  {
    "code": "XFASTDICTIONARY",
    "title": "X-Fast Dictionary",
    "full_title": "X-Fast Dictionary",
    "judge": "Canonical x-fast predecessor benchmark",
    "judge_url": "https://opendatastructures.org/newhtml/ods/latex/integers.html",
    "main_topic": "Data Structures -> X-Fast / Y-Fast Tries",
    "secondary_topics": [
      "Prefix hashing",
      "Leaf-linked order",
      "Predecessor / successor",
      "Bounded universe"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "data-structures/x-fast-y-fast-tries",
    "topic_tags": [
      "data-structures/x-fast-y-fast-tries"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/data-structures/x-fast-y-fast-tries/xfastdictionary.md",
    "ladder_path": "practice/ladders/data-structures/x-fast-y-fast-tries/README.md",
    "tutorial_path": "topics/data-structures/x-fast-y-fast-tries/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/data-structures/x-fast-y-fast-tries/xfastdictionary.cpp"
  },
  {
    "code": "SCHOOLEXCURSION",
    "title": "School Excursion",
    "full_title": "School Excursion",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1706/",
    "main_topic": "DP -> Bit-Parallelism / Bitset Optimization",
    "secondary_topics": [
      "DSU",
      "Component sizes",
      "Boolean reachability"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/bit-parallelism",
    "topic_tags": [
      "dp/bit-parallelism"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/bit-parallelism/schoolexcursion.md",
    "ladder_path": "practice/ladders/dp/bit-parallelism/README.md",
    "tutorial_path": "topics/dp/bit-parallelism/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/bit-parallelism/schoolexcursion.cpp"
  },
  {
    "code": "VMMARBLE",
    "title": "Phân loại bi",
    "full_title": "VMMARBLE - Phân loại bi",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/VMMARBLE/",
    "main_topic": "DP -> Bitmask DP",
    "secondary_topics": [
      "Assignment",
      "Lower bound equals construction",
      "Keeper-box selection"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/bitmask-dp",
    "topic_tags": [
      "dp/bitmask-dp",
      "advanced/constructive"
    ],
    "patterns": [
      "final-color assignment",
      "residual-state dp",
      "capacity-2 moves"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/dp/bitmask-dp/vmmarble.md",
    "ladder_path": "practice/ladders/dp/bitmask-dp/README.md",
    "tutorial_path": "topics/dp/bitmask-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/bitmask-dp/vmmarble.cpp"
  },
  {
    "code": "COUNTINGTILINGS",
    "title": "Counting Tilings",
    "full_title": "Counting Tilings",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2181",
    "main_topic": "DP -> Broken Profile / Plug DP",
    "secondary_topics": [
      "Frontier mask",
      "Column sweep",
      "Domino tilings"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/broken-profile",
    "topic_tags": [
      "dp/broken-profile"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/broken-profile/countingtilings.md",
    "ladder_path": "practice/ladders/dp/broken-profile/README.md",
    "tutorial_path": "topics/dp/broken-profile/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/broken-profile/countingtilings.cpp"
  },
  {
    "code": "LINEADDGETMIN",
    "title": "Line Add Get Min",
    "full_title": "Line Add Get Min",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/line_add_get_min",
    "main_topic": "DP -> Convex Hull Trick / Li Chao Tree",
    "secondary_topics": [
      "LineContainer",
      "Convex hull trick",
      "Online line minimum"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/cht-li-chao",
    "topic_tags": [
      "dp/cht-li-chao"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/cht-li-chao/lineaddgetmin.md",
    "ladder_path": "practice/ladders/dp/cht-li-chao/README.md",
    "tutorial_path": "topics/dp/cht-li-chao/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/cht-li-chao/lineaddgetmin.cpp"
  },
  {
    "code": "MONSTERGAME2",
    "title": "Monster Game II",
    "full_title": "Monster Game II",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2085",
    "main_topic": "DP -> Convex Hull Trick / Li Chao Tree",
    "secondary_topics": [
      "Li Chao tree",
      "Affine DP",
      "Line container"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/cht-li-chao",
    "topic_tags": [
      "dp/cht-li-chao"
    ],
    "patterns": [
      "li chao tree",
      "affine dp",
      "online line minimum"
    ],
    "tracks": [
      "CSES",
      "Dynamic programming"
    ],
    "note_path": "practice/ladders/dp/cht-li-chao/monstergame2.md",
    "ladder_path": "practice/ladders/dp/cht-li-chao/README.md",
    "tutorial_path": "topics/dp/cht-li-chao/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/cht-li-chao/monstergame2.cpp"
  },
  {
    "code": "COUNTINGNUMBERS",
    "title": "Counting Numbers",
    "full_title": "Counting Numbers",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2220",
    "main_topic": "DP -> Digit DP",
    "secondary_topics": [
      "Previous digit state",
      "Leading zeros",
      "Range counting"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/digit-dp",
    "topic_tags": [
      "dp/digit-dp"
    ],
    "patterns": [
      "digit dp",
      "previous digit state",
      "range counting"
    ],
    "tracks": [
      "CSES",
      "Dynamic programming"
    ],
    "note_path": "practice/ladders/dp/digit-dp/countingnumbers.md",
    "ladder_path": "practice/ladders/dp/digit-dp/README.md",
    "tutorial_path": "topics/dp/digit-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/digit-dp/countingnumbers.cpp"
  },
  {
    "code": "CIELANDGONDOLAS",
    "title": "Ciel and Gondolas",
    "full_title": "Ciel and Gondolas",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/321/E",
    "main_topic": "DP -> Divide and Conquer DP",
    "secondary_topics": [
      "Partition DP",
      "2D prefix sums",
      "Monotone-opt"
    ],
    "difficulty": "very hard",
    "status": "solved",
    "primary_slug": "dp/divide-and-conquer-dp",
    "topic_tags": [
      "dp/divide-and-conquer-dp"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/divide-and-conquer-dp/cielandgondolas.md",
    "ladder_path": "practice/ladders/dp/divide-and-conquer-dp/README.md",
    "tutorial_path": "topics/dp/divide-and-conquer-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/divide-and-conquer-dp/cielandgondolas.cpp"
  },
  {
    "code": "VMSCALE",
    "title": "Chiếc cân kỳ diệu",
    "full_title": "VMSCALE - Chiếc cân kỳ diệu",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VMSCALE/",
    "main_topic": "DP -> Foundations",
    "secondary_topics": [
      "Decision tree",
      "Balanced ternary",
      "Minimax DP"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/foundations",
    "topic_tags": [
      "dp/foundations",
      "math/number-theory-basics"
    ],
    "patterns": [
      "budget dp",
      "balanced ternary",
      "decision-tree optimization"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/dp/foundations/vmscale.md",
    "ladder_path": "practice/ladders/dp/foundations/README.md",
    "tutorial_path": "topics/dp/foundations/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/foundations/vmscale.cpp"
  },
  {
    "code": "BITWISEXORCONVOLUTION",
    "title": "Bitwise XOR Convolution",
    "full_title": "Bitwise XOR Convolution",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/bitwise_xor_convolution",
    "main_topic": "DP -> FWHT / XOR Convolution / Subset Convolution",
    "secondary_topics": [
      "FWHT",
      "Walsh-Hadamard",
      "Boolean-cube transforms"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/fwht-subset-convolution",
    "topic_tags": [
      "dp/fwht-subset-convolution"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/fwht-subset-convolution/bitwisexorconvolution.md",
    "ladder_path": "practice/ladders/dp/fwht-subset-convolution/README.md",
    "tutorial_path": "topics/dp/fwht-subset-convolution/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/fwht-subset-convolution/bitwisexorconvolution.cpp"
  },
  {
    "code": "REMOVALGAME",
    "title": "Removal Game",
    "full_title": "Removal Game",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1097",
    "main_topic": "DP -> Interval DP",
    "secondary_topics": [
      "Score-difference DP",
      "Take from ends game",
      "Minimax"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/interval-dp",
    "topic_tags": [
      "dp/interval-dp"
    ],
    "patterns": [
      "score difference dp",
      "take from ends",
      "interval minimax"
    ],
    "tracks": [
      "CSES",
      "Dynamic programming"
    ],
    "note_path": "practice/ladders/dp/interval-dp/removalgame.md",
    "ladder_path": "practice/ladders/dp/interval-dp/README.md",
    "tutorial_path": "topics/dp/interval-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/interval-dp/removalgame.cpp"
  },
  {
    "code": "BOOKSHOP",
    "title": "Book Shop",
    "full_title": "Book Shop",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1158",
    "main_topic": "DP -> Knapsack Family",
    "secondary_topics": [
      "0/1 knapsack",
      "Downward capacity loop",
      "Budget maximization"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "dp/knapsack-family",
    "topic_tags": [
      "dp/knapsack-family",
      "advanced/complexity-and-hardness"
    ],
    "patterns": [
      "0 1 knapsack",
      "downward capacity loop",
      "budget value maximization"
    ],
    "tracks": [
      "CSES",
      "Dynamic programming"
    ],
    "note_path": "practice/ladders/dp/knapsack-family/bookshop.md",
    "ladder_path": "practice/ladders/dp/knapsack-family/README.md",
    "tutorial_path": "topics/dp/knapsack-family/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/knapsack-family/bookshop.cpp"
  },
  {
    "code": "KNUTHDIVISION",
    "title": "Knuth Division",
    "full_title": "Knuth Division",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2088/",
    "main_topic": "DP -> Knuth Optimization",
    "secondary_topics": [
      "Interval DP",
      "Prefix sums",
      "Opt monotonicity"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/knuth-optimization",
    "topic_tags": [
      "dp/knuth-optimization"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/knuth-optimization/knuthdivision.md",
    "ladder_path": "practice/ladders/dp/knuth-optimization/README.md",
    "tutorial_path": "topics/dp/knuth-optimization/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/knuth-optimization/knuthdivision.cpp"
  },
  {
    "code": "REDANDBLUELAMPS",
    "title": "Red and Blue Lamps",
    "full_title": "Red and Blue Lamps",
    "judge": "AtCoder ABC218 H",
    "judge_url": "https://atcoder.jp/contests/abc218/tasks/abc218_h",
    "main_topic": "DP -> Lagrangian Relaxation / Aliens Trick",
    "secondary_topics": [
      "Aliens Trick",
      "Weighted independent set on a path",
      "Penalty search"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/lagrangian-relaxation",
    "topic_tags": [
      "dp/lagrangian-relaxation"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/lagrangian-relaxation/redandbluelamps.md",
    "ladder_path": "practice/ladders/dp/lagrangian-relaxation/README.md",
    "tutorial_path": "topics/dp/lagrangian-relaxation/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/lagrangian-relaxation/redandbluelamps.cpp"
  },
  {
    "code": "SLIDINGWINDOWMINIMUM",
    "title": "Sliding Window Minimum",
    "full_title": "Sliding Window Minimum",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/3221",
    "main_topic": "DP -> Sliding Window And Window DP",
    "secondary_topics": [
      "Monotonic deque",
      "Generated input",
      "Window aggregate"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/sliding-window",
    "topic_tags": [
      "dp/sliding-window"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/sliding-window/slidingwindowminimum.md",
    "ladder_path": "practice/ladders/dp/sliding-window/README.md",
    "tutorial_path": "topics/foundations/patterns/two-pointers/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/sliding-window/slidingwindowminimum.cpp"
  },
  {
    "code": "TFIELD",
    "title": "Ruộng bậc thang",
    "full_title": "Ruộng bậc thang",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/TFIELD/",
    "main_topic": "DP -> Sliding Window And Window DP",
    "secondary_topics": [
      "Polygon area",
      "Sorting nested polygons",
      "Two pointers"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/sliding-window",
    "topic_tags": [
      "dp/sliding-window",
      "foundations/two-pointers",
      "geometry/polygon-area-point-location"
    ],
    "patterns": [
      "nested polygons",
      "weighted sliding window",
      "shoelace preprocessing"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/dp/sliding-window/tfield.md",
    "ladder_path": "practice/ladders/dp/sliding-window/README.md",
    "tutorial_path": "topics/foundations/patterns/two-pointers/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/sliding-window/tfield.cpp"
  },
  {
    "code": "SNUKETOON",
    "title": "Snuketoon",
    "full_title": "Snuketoon",
    "judge": "AtCoder ABC217 H",
    "judge_url": "https://atcoder.jp/contests/abc217/tasks/abc217_h",
    "main_topic": "DP -> Slope Trick",
    "secondary_topics": [
      "Slope trick",
      "Convex DP",
      "Two heaps"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "dp/slope-trick",
    "topic_tags": [
      "dp/slope-trick"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/slope-trick/snuketoon.md",
    "ladder_path": "practice/ladders/dp/slope-trick/README.md",
    "tutorial_path": "topics/dp/slope-trick/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/slope-trick/snuketoon.cpp"
  },
  {
    "code": "COMPATIBLENUMBERS",
    "title": "Compatible Numbers",
    "full_title": "Compatible Numbers",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/165/E",
    "main_topic": "DP -> SOS DP",
    "secondary_topics": [
      "Bitwise complements",
      "Subset zeta sweep",
      "Witness propagation"
    ],
    "difficulty": "2200",
    "status": "solved",
    "primary_slug": "dp/sos-dp",
    "topic_tags": [
      "dp/sos-dp"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/sos-dp/compatiblenumbers.md",
    "ladder_path": "practice/ladders/dp/sos-dp/README.md",
    "tutorial_path": "topics/dp/sos-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/sos-dp/compatiblenumbers.cpp"
  },
  {
    "code": "TREEDISTANCES2",
    "title": "Tree Distances II",
    "full_title": "Tree Distances II",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1133",
    "main_topic": "DP -> Tree DP",
    "secondary_topics": [
      "Rerooting",
      "Subtree sizes",
      "All-roots answers"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/tree-dp",
    "topic_tags": [
      "dp/tree-dp"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/dp/tree-dp/treedistances2.md",
    "ladder_path": "practice/ladders/dp/tree-dp/README.md",
    "tutorial_path": "topics/dp/tree-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/tree-dp/treedistances2.cpp"
  },
  {
    "code": "TREEMATCHING",
    "title": "Tree Matching",
    "full_title": "Tree Matching",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1130",
    "main_topic": "DP -> Tree DP",
    "secondary_topics": [
      "Maximum matching on a tree",
      "Rooted subtree states",
      "Child contribution swap"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "dp/tree-dp",
    "topic_tags": [
      "dp/tree-dp",
      "graphs/trees"
    ],
    "patterns": [
      "tree matching dp",
      "matched or unmatched state",
      "child swap contribution"
    ],
    "tracks": [
      "CSES",
      "Tree algorithms"
    ],
    "note_path": "practice/ladders/dp/tree-dp/treematching.md",
    "ladder_path": "practice/ladders/dp/tree-dp/README.md",
    "tutorial_path": "topics/dp/tree-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/dp/tree-dp/treematching.cpp"
  },
  {
    "code": "FACTORYMACHINES",
    "title": "Factory Machines",
    "full_title": "Factory Machines",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1620",
    "main_topic": "Foundations -> Binary Search",
    "secondary_topics": [
      "Answer binary search",
      "Monotone feasibility",
      "Saturating accumulation"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "foundations/binary-search",
    "topic_tags": [
      "foundations/binary-search",
      "foundations/complexity-and-invariants"
    ],
    "patterns": [
      "answer binary search",
      "monotone feasibility",
      "production rate accumulation"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/binary-search/factorymachines.md",
    "ladder_path": "practice/ladders/foundations/binary-search/README.md",
    "tutorial_path": "topics/foundations/patterns/binary-search/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/binary-search/factorymachines.cpp"
  },
  {
    "code": "INCREASINGARRAY",
    "title": "Increasing Array",
    "full_title": "Increasing Array",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1094",
    "main_topic": "Foundations -> Complexity And Invariants",
    "secondary_topics": [
      "Loop invariant",
      "Greedy repair",
      "Running maximum"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/complexity-and-invariants",
    "topic_tags": [
      "foundations/complexity-and-invariants"
    ],
    "patterns": [
      "loop invariant scan",
      "greedy repair",
      "running maximum maintenance"
    ],
    "tracks": [
      "CSES",
      "Introductory problems"
    ],
    "note_path": "practice/ladders/foundations/complexity-and-invariants/increasingarray.md",
    "ladder_path": "practice/ladders/foundations/complexity-and-invariants/README.md",
    "tutorial_path": "topics/foundations/reasoning/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/complexity-and-invariants/increasingarray.cpp"
  },
  {
    "code": "MISSINGNUMBER",
    "title": "Missing Number",
    "full_title": "Missing Number",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1083",
    "main_topic": "Foundations -> C++ Language",
    "secondary_topics": [
      "Running total",
      "long long discipline",
      "Input fluency"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/cpp-language",
    "topic_tags": [
      "foundations/cpp-language"
    ],
    "patterns": [
      "running total subtraction",
      "arithmetic series sum",
      "type safe warm-up"
    ],
    "tracks": [
      "CSES",
      "Introductory problems"
    ],
    "note_path": "practice/ladders/foundations/cpp-language/missingnumber.md",
    "ladder_path": "practice/ladders/foundations/cpp-language/README.md",
    "tutorial_path": "topics/foundations/cpp-language/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/cpp-language/missingnumber.cpp"
  },
  {
    "code": "WEIRDALGORITHM",
    "title": "Weird Algorithm",
    "full_title": "Weird Algorithm",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1068",
    "main_topic": "Foundations -> C++ Language",
    "secondary_topics": [
      "Basic loops",
      "Parity branching",
      "Output discipline"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/cpp-language",
    "topic_tags": [
      "foundations/cpp-language"
    ],
    "patterns": [
      "simulation loop",
      "parity branching",
      "first local workflow"
    ],
    "tracks": [
      "CSES",
      "Introductory problems"
    ],
    "note_path": "practice/ladders/foundations/cpp-language/weirdalgorithm.md",
    "ladder_path": "practice/ladders/foundations/cpp-language/README.md",
    "tutorial_path": "topics/foundations/cpp-language/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/cpp-language/weirdalgorithm.cpp"
  },
  {
    "code": "RANGEUPDATEQUERIES",
    "title": "Range Update Queries",
    "full_title": "Range Update Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1651",
    "main_topic": "Foundations -> Difference Arrays",
    "secondary_topics": [
      "Dynamic difference array",
      "Fenwick tree",
      "Range-add point-query"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "foundations/difference-arrays",
    "topic_tags": [
      "foundations/difference-arrays",
      "data-structures/fenwick-tree"
    ],
    "patterns": [
      "difference array updates",
      "fenwick on diff",
      "range add point query"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/foundations/difference-arrays/rangeupdatequeries.md",
    "ladder_path": "practice/ladders/foundations/difference-arrays/README.md",
    "tutorial_path": "topics/foundations/patterns/difference-arrays/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/difference-arrays/rangeupdatequeries.cpp"
  },
  {
    "code": "STATICRANGESUMQUERIES",
    "title": "Static Range Sum Queries",
    "full_title": "Static Range Sum Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1646",
    "main_topic": "Foundations -> Prefix Sums",
    "secondary_topics": [
      "1D prefix sum",
      "Range subtraction",
      "Immutable array"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/prefix-sums",
    "topic_tags": [
      "foundations/prefix-sums"
    ],
    "patterns": [
      "prefix sum build",
      "range sum by subtraction",
      "immutable array queries"
    ],
    "tracks": [
      "CSES",
      "Range queries"
    ],
    "note_path": "practice/ladders/foundations/prefix-sums/staticrangesumqueries.md",
    "ladder_path": "practice/ladders/foundations/prefix-sums/README.md",
    "tutorial_path": "topics/foundations/patterns/prefix-sums/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/prefix-sums/staticrangesumqueries.cpp"
  },
  {
    "code": "FERRISWHEEL",
    "title": "Ferris Wheel",
    "full_title": "Ferris Wheel",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1090",
    "main_topic": "Foundations -> Sorting",
    "secondary_topics": [
      "Opposite-end two pointers",
      "Greedy pairing",
      "Lightest-heaviest matching"
    ],
    "difficulty": "easy-medium",
    "status": "solved",
    "primary_slug": "foundations/sorting",
    "topic_tags": [
      "foundations/sorting",
      "foundations/two-pointers"
    ],
    "patterns": [
      "opposite end pointers",
      "greedy pairing",
      "sorted capacity matching"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/sorting/ferriswheel.md",
    "ladder_path": "practice/ladders/foundations/sorting/README.md",
    "tutorial_path": "topics/foundations/patterns/sorting/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/sorting/ferriswheel.cpp"
  },
  {
    "code": "MOVIEFESTIVAL",
    "title": "Movie Festival",
    "full_title": "Movie Festival",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1629",
    "main_topic": "Foundations -> Sorting",
    "secondary_topics": [
      "Interval scheduling",
      "Finish-time ordering",
      "Exchange argument"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/sorting",
    "topic_tags": [
      "foundations/sorting",
      "foundations/complexity-and-invariants"
    ],
    "patterns": [
      "finish-time sorting",
      "interval scheduling",
      "exchange argument greedy"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/sorting/moviefestival.md",
    "ladder_path": "practice/ladders/foundations/sorting/README.md",
    "tutorial_path": "topics/foundations/patterns/sorting/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/sorting/moviefestival.cpp"
  },
  {
    "code": "DISTINCTNUMBERS",
    "title": "Distinct Numbers",
    "full_title": "Distinct Numbers",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1621",
    "main_topic": "Foundations -> STL Basics",
    "secondary_topics": [
      "sort",
      "unique",
      "Container choice"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "foundations/stl",
    "topic_tags": [
      "foundations/stl",
      "foundations/cpp-language"
    ],
    "patterns": [
      "sort unique",
      "container deduplication",
      "stl algorithms"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/stl/distinctnumbers.md",
    "ladder_path": "practice/ladders/foundations/stl/README.md",
    "tutorial_path": "topics/foundations/cpp-language/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/stl/distinctnumbers.cpp"
  },
  {
    "code": "APARTMENTS",
    "title": "Apartments",
    "full_title": "Apartments",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1084",
    "main_topic": "Foundations -> Two Pointers",
    "secondary_topics": [
      "Greedy matching",
      "Sorted scan",
      "Tolerance window"
    ],
    "difficulty": "easy-medium",
    "status": "solved",
    "primary_slug": "foundations/two-pointers",
    "topic_tags": [
      "foundations/two-pointers",
      "foundations/sorting"
    ],
    "patterns": [
      "two sorted pointers",
      "tolerance matching",
      "greedy monotone scan"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/two-pointers/apartments.md",
    "ladder_path": "practice/ladders/foundations/two-pointers/README.md",
    "tutorial_path": "topics/foundations/patterns/two-pointers/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/two-pointers/apartments.cpp"
  },
  {
    "code": "SUMOFTWOVALUES",
    "title": "Sum of Two Values",
    "full_title": "Sum of Two Values",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1640",
    "main_topic": "Foundations -> Two Pointers",
    "secondary_topics": [
      "Sort and scan",
      "Original index recovery",
      "Opposite-end pointers"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "foundations/two-pointers",
    "topic_tags": [
      "foundations/two-pointers",
      "foundations/sorting"
    ],
    "patterns": [
      "sort and scan",
      "opposite end pointers",
      "index restoration"
    ],
    "tracks": [
      "CSES",
      "Sorting and searching"
    ],
    "note_path": "practice/ladders/foundations/two-pointers/sumoftwovalues.md",
    "ladder_path": "practice/ladders/foundations/two-pointers/README.md",
    "tutorial_path": "topics/foundations/patterns/two-pointers/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/foundations/two-pointers/sumoftwovalues.cpp"
  },
  {
    "code": "CONVEXHULL",
    "title": "Convex Hull",
    "full_title": "Convex Hull",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2195",
    "main_topic": "Geometry -> Convex Hull",
    "secondary_topics": [
      "Andrew monotone chain",
      "Orientation test",
      "Boundary collinear points"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "geometry/convex-hull",
    "topic_tags": [
      "geometry/convex-hull",
      "geometry/vector-orientation"
    ],
    "patterns": [
      "andrew monotone chain",
      "strict turn pop",
      "boundary collinear points"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/geometry/convex-hull/convexhull.md",
    "ladder_path": "practice/ladders/geometry/convex-hull/README.md",
    "tutorial_path": "topics/geometry/convex-hull/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/convex-hull/convexhull.cpp"
  },
  {
    "code": "BIGBROTHER",
    "title": "Big Brother",
    "full_title": "Big Brother",
    "judge": "Kattis",
    "judge_url": "https://open.kattis.com/problems/bigbrother",
    "main_topic": "Geometry -> Half-Plane Intersection",
    "secondary_topics": [
      "Polygon kernel",
      "Half-plane intersection",
      "Polygon orientation"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "geometry/half-plane-intersection",
    "topic_tags": [
      "geometry/half-plane-intersection"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/geometry/half-plane-intersection/bigbrother.md",
    "ladder_path": "practice/ladders/geometry/half-plane-intersection/README.md",
    "tutorial_path": "topics/geometry/half-plane-intersection/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/half-plane-intersection/bigbrother.cpp"
  },
  {
    "code": "MOGOHUREAIDOL",
    "title": "Mogohu-Rea Idol",
    "full_title": "Mogohu-Rea Idol",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/87/E",
    "main_topic": "Geometry -> Minkowski Sum",
    "secondary_topics": [
      "Point in convex polygon",
      "Convex polygons"
    ],
    "difficulty": "very-hard",
    "status": "solved",
    "primary_slug": "geometry/minkowski-sum",
    "topic_tags": [
      "geometry/minkowski-sum"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/geometry/minkowski-sum/mogohureaidol.md",
    "ladder_path": "practice/ladders/geometry/minkowski-sum/README.md",
    "tutorial_path": "topics/geometry/minkowski-sum/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/minkowski-sum/mogohureaidol.cpp"
  },
  {
    "code": "CLOSESTPAIR",
    "title": "Closest Pair",
    "full_title": "Closest Pair",
    "judge": "AOJ",
    "judge_url": "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=CGL_5_A",
    "main_topic": "Geometry -> Nearest Pair of Points",
    "secondary_topics": [
      "Nearest pair",
      "Sweep line",
      "Active strip"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "geometry/nearest-pair",
    "topic_tags": [
      "geometry/nearest-pair"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/geometry/nearest-pair/closestpair.md",
    "ladder_path": "practice/ladders/geometry/nearest-pair/README.md",
    "tutorial_path": "topics/geometry/nearest-pair/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/nearest-pair/closestpair.cpp"
  },
  {
    "code": "POINTINPOLYGON",
    "title": "Point in Polygon",
    "full_title": "Point in Polygon",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2192",
    "main_topic": "Geometry -> Polygon Area And Point Location",
    "secondary_topics": [
      "Ray casting",
      "Boundary handling",
      "On-segment check"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "geometry/polygon-area-point-location",
    "topic_tags": [
      "geometry/polygon-area-point-location",
      "geometry/vector-orientation",
      "geometry/segment-intersection"
    ],
    "patterns": [
      "ray casting parity",
      "boundary classification",
      "on segment test"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/geometry/polygon-area-point-location/pointinpolygon.md",
    "ladder_path": "practice/ladders/geometry/polygon-area-point-location/README.md",
    "tutorial_path": "topics/geometry/polygon-area-point-location/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/polygon-area-point-location/pointinpolygon.cpp"
  },
  {
    "code": "POLYGONAREA",
    "title": "Polygon Area",
    "full_title": "Polygon Area",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2191",
    "main_topic": "Geometry -> Polygon Area And Point Location",
    "secondary_topics": [
      "Shoelace formula",
      "Signed area",
      "Cross product sum"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "geometry/polygon-area-point-location",
    "topic_tags": [
      "geometry/polygon-area-point-location",
      "geometry/vector-orientation"
    ],
    "patterns": [
      "shoelace formula",
      "signed area accumulation",
      "integer polygon area"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/geometry/polygon-area-point-location/polygonarea.md",
    "ladder_path": "practice/ladders/geometry/polygon-area-point-location/README.md",
    "tutorial_path": "topics/geometry/polygon-area-point-location/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/polygon-area-point-location/polygonarea.cpp"
  },
  {
    "code": "PRAVO",
    "title": "Tam giác vuông",
    "full_title": "Tam giác vuông",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/PRAVO/",
    "main_topic": "Geometry -> Right Triangles",
    "secondary_topics": [
      "Normalized direction vectors",
      "Sorting",
      "Perpendicular directions"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "geometry/right-triangles",
    "topic_tags": [
      "geometry/right-triangles",
      "advanced/algorithm-engineering",
      "geometry/counting-geometry",
      "geometry/vector-orientation"
    ],
    "patterns": [
      "count right triangles",
      "normalized directions",
      "perpendicular pairing"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/geometry/right-triangles/pravo.md",
    "ladder_path": "practice/ladders/geometry/right-triangles/README.md",
    "tutorial_path": "topics/geometry/counting-geometry/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/right-triangles/pravo.cpp"
  },
  {
    "code": "LINESEGMENTINTERSECTION",
    "title": "Line Segment Intersection",
    "full_title": "Line Segment Intersection",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2190",
    "main_topic": "Geometry -> Segment Intersection",
    "secondary_topics": [
      "Orientation test",
      "On-segment check",
      "Collinear overlap"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "geometry/segment-intersection",
    "topic_tags": [
      "geometry/segment-intersection",
      "geometry/vector-orientation"
    ],
    "patterns": [
      "orientation test",
      "on segment inclusion",
      "collinear overlap handling"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/geometry/segment-intersection/linesegmentintersection.md",
    "ladder_path": "practice/ladders/geometry/segment-intersection/README.md",
    "tutorial_path": "topics/geometry/segment-intersection/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/segment-intersection/linesegmentintersection.cpp"
  },
  {
    "code": "KINGDOMS",
    "title": "KINGDOMS",
    "full_title": "VM 10 Bài 14 - KINGDOMS",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/ranks/KINGDOMS/",
    "main_topic": "Geometry -> Sweep Line",
    "secondary_topics": [
      "Nested convex polygons",
      "Laminar intervals",
      "Point location"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "geometry/sweep-line",
    "topic_tags": [
      "geometry/sweep-line",
      "graphs/trees",
      "geometry/polygon-area-point-location"
    ],
    "patterns": [
      "laminar regions",
      "sweep events",
      "containment tree"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/geometry/sweep-line/kingdoms.md",
    "ladder_path": "practice/ladders/geometry/sweep-line/README.md",
    "tutorial_path": "topics/geometry/sweep-line/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/sweep-line/kingdoms.cpp"
  },
  {
    "code": "VOTELPH",
    "title": "Bà Nà",
    "full_title": "VOTELPH - Bà Nà",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VOTELPH/",
    "main_topic": "Geometry -> Sweep Line",
    "secondary_topics": [
      "Concave quadratics",
      "Offline preprocessing",
      "Range maximum query"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "geometry/sweep-line",
    "topic_tags": [
      "geometry/sweep-line",
      "geometry/polygon-area-point-location"
    ],
    "patterns": [
      "piecewise maximum",
      "endpoint preprocessing",
      "parabola envelopes"
    ],
    "tracks": [
      "VN SPOJ",
      "ICPC-style"
    ],
    "note_path": "practice/ladders/geometry/sweep-line/votelph.md",
    "ladder_path": "practice/ladders/geometry/sweep-line/README.md",
    "tutorial_path": "topics/geometry/sweep-line/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/sweep-line/votelph.cpp"
  },
  {
    "code": "POINTLOCATIONTEST",
    "title": "Point Location Test",
    "full_title": "Point Location Test",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2189",
    "main_topic": "Geometry -> Vector And Orientation",
    "secondary_topics": [
      "Cross product sign",
      "Directed line side test",
      "Integer geometry"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "geometry/vector-orientation",
    "topic_tags": [
      "geometry/vector-orientation"
    ],
    "patterns": [
      "cross product orientation",
      "signed area test",
      "turn classification"
    ],
    "tracks": [
      "CSES",
      "Geometry"
    ],
    "note_path": "practice/ladders/geometry/vector-orientation/pointlocationtest.md",
    "ladder_path": "practice/ladders/geometry/vector-orientation/README.md",
    "tutorial_path": "topics/geometry/vector-orientation/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/geometry/vector-orientation/pointlocationtest.cpp"
  },
  {
    "code": "MESSAGEROUTE",
    "title": "Message Route",
    "full_title": "Message Route",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1667",
    "main_topic": "Graphs -> BFS And DFS",
    "secondary_topics": [
      "Unweighted shortest path",
      "Parent reconstruction",
      "Layered BFS"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "graphs/bfs-dfs",
    "topic_tags": [
      "graphs/bfs-dfs",
      "graphs/graph-modeling"
    ],
    "patterns": [
      "breadth-first search",
      "unweighted shortest path",
      "parent reconstruction"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/bfs-dfs/messageroute.md",
    "ladder_path": "practice/ladders/graphs/bfs-dfs/README.md",
    "tutorial_path": "topics/graphs/bfs-dfs/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/bfs-dfs/messageroute.cpp"
  },
  {
    "code": "NECESSARYROADS",
    "title": "Necessary Roads",
    "full_title": "Necessary Roads",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2076",
    "main_topic": "Graphs -> Bridges, Articulation, And BCC",
    "secondary_topics": [
      "Bridge detection",
      "DFS tree",
      "Low-link"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/bridges-articulation",
    "topic_tags": [
      "graphs/bridges-articulation"
    ],
    "patterns": [
      "low-link",
      "bridge detection",
      "dfs tree critical edge"
    ],
    "tracks": [
      "CSES",
      "Advanced techniques"
    ],
    "note_path": "practice/ladders/graphs/bridges-articulation/necessaryroads.md",
    "ladder_path": "practice/ladders/graphs/bridges-articulation/README.md",
    "tutorial_path": "topics/graphs/bridges-articulation/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/bridges-articulation/necessaryroads.cpp"
  },
  {
    "code": "CIELTHECOMMANDER",
    "title": "Ciel the Commander",
    "full_title": "Ciel the Commander",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/321/C",
    "main_topic": "Graphs -> Centroid Decomposition",
    "secondary_topics": [
      "Centroid decomposition",
      "Centroid tree",
      "Balanced recursive labeling"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/centroid-decomposition",
    "topic_tags": [
      "graphs/centroid-decomposition",
      "graphs/trees"
    ],
    "patterns": [
      "centroid decomposition",
      "centroid tree labeling",
      "balanced recursive split"
    ],
    "tracks": [
      "Codeforces",
      "Tree decomposition"
    ],
    "note_path": "practice/ladders/graphs/centroid-decomposition/cielthecommander.md",
    "ladder_path": "practice/ladders/graphs/centroid-decomposition/README.md",
    "tutorial_path": "topics/graphs/centroid-decomposition/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/centroid-decomposition/cielthecommander.cpp"
  },
  {
    "code": "DEBRUIJNSEQUENCE",
    "title": "De Bruijn Sequence",
    "full_title": "De Bruijn Sequence",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1692",
    "main_topic": "Graphs -> De Bruijn Sequence",
    "secondary_topics": [
      "Eulerian cycle",
      "Graph modeling",
      "Bitmask states"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/de-bruijn-sequence",
    "topic_tags": [
      "graphs/de-bruijn-sequence"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/de-bruijn-sequence/debruijnsequence.md",
    "ladder_path": "practice/ladders/graphs/de-bruijn-sequence/README.md",
    "tutorial_path": "topics/graphs/de-bruijn-sequence/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/de-bruijn-sequence/debruijnsequence.cpp"
  },
  {
    "code": "SUBTREEQUERIES",
    "title": "Subtree Queries",
    "full_title": "Subtree Queries",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1137",
    "main_topic": "Graphs -> Euler Tour / Subtree Queries",
    "secondary_topics": [
      "Euler tour flattening",
      "Subtree interval",
      "Fenwick tree"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/euler-tour-subtree",
    "topic_tags": [
      "graphs/euler-tour-subtree",
      "graphs/trees",
      "data-structures/fenwick-tree"
    ],
    "patterns": [
      "euler tour flattening",
      "subtree interval",
      "fenwick point set range sum"
    ],
    "tracks": [
      "CSES",
      "Tree algorithms"
    ],
    "note_path": "practice/ladders/graphs/euler-tour-subtree/subtreequeries.md",
    "ladder_path": "practice/ladders/graphs/euler-tour-subtree/README.md",
    "tutorial_path": "topics/graphs/euler-tour-subtree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/euler-tour-subtree/subtreequeries.cpp"
  },
  {
    "code": "DYNAMICTREEVERTEXADDSUBTREESUM",
    "title": "Dynamic Tree Vertex Add Subtree Sum",
    "full_title": "Dynamic Tree Vertex Add Subtree Sum",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/dynamic_tree_vertex_add_subtree_sum",
    "main_topic": "Graphs -> Euler Tour Tree",
    "secondary_topics": [
      "Dynamic trees",
      "Treap / split-merge",
      "Subtree aggregates"
    ],
    "difficulty": "very hard",
    "status": "solved",
    "primary_slug": "graphs/euler-tour-tree",
    "topic_tags": [
      "graphs/euler-tour-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/euler-tour-tree/dynamictreevertexaddsubtreesum.md",
    "ladder_path": "practice/ladders/graphs/euler-tour-tree/README.md",
    "tutorial_path": "topics/graphs/euler-tour-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/euler-tour-tree/dynamictreevertexaddsubtreesum.cpp"
  },
  {
    "code": "MAILDELIVERY",
    "title": "Mail Delivery",
    "full_title": "Mail Delivery",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1691",
    "main_topic": "Graphs -> Eulerian Path / Cycle",
    "secondary_topics": [
      "Eulerian cycle",
      "Hierholzer",
      "Degree parity"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/eulerian-path-cycle",
    "topic_tags": [
      "graphs/eulerian-path-cycle"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/eulerian-path-cycle/maildelivery.md",
    "ladder_path": "practice/ladders/graphs/eulerian-path-cycle/README.md",
    "tutorial_path": "topics/graphs/eulerian-path-cycle/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/eulerian-path-cycle/maildelivery.cpp"
  },
  {
    "code": "FFLOW",
    "title": "Fast Maximum Flow",
    "full_title": "Fast Maximum Flow",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/FFLOW/",
    "main_topic": "Graphs -> Maximum Flow",
    "secondary_topics": [
      "Dinic",
      "Undirected capacity graph"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/flow",
    "topic_tags": [
      "graphs/flow",
      "advanced/algorithm-engineering"
    ],
    "patterns": [
      "maximum flow",
      "undirected capacities",
      "capacity scaling"
    ],
    "tracks": [
      "VN SPOJ",
      "ICPC-style"
    ],
    "note_path": "practice/ladders/graphs/flow/fflow.md",
    "ladder_path": "practice/ladders/graphs/flow/README.md",
    "tutorial_path": "topics/graphs/flow/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/fflow.cpp"
  },
  {
    "code": "MAXIMUMFLOWPUSHRELABEL",
    "title": "Maximum Flow",
    "full_title": "Maximum Flow",
    "judge": "AOJ",
    "judge_url": "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_6_A",
    "main_topic": "Graphs -> Maximum Flow",
    "secondary_topics": [
      "Push-Relabel",
      "Highest-label",
      "Gap heuristic"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/flow",
    "topic_tags": [
      "graphs/flow"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/flow/maximumflowpushrelabel.md",
    "ladder_path": "practice/ladders/graphs/flow/README.md",
    "tutorial_path": "topics/graphs/flow/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/maximumflowpushrelabel.cpp"
  },
  {
    "code": "MINCOST",
    "title": "Luồng với chi phí nhỏ nhất",
    "full_title": "Luồng với chi phí nhỏ nhất",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/MINCOST/",
    "main_topic": "Graphs -> Maximum Flow",
    "secondary_topics": [
      "Min-cost max-flow",
      "Shortest augmenting path",
      "Flow reconstruction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/flow",
    "topic_tags": [
      "graphs/flow",
      "graphs/min-cost-flow"
    ],
    "patterns": [
      "transportation network",
      "flow reconstruction",
      "duplicate-edge overwrite"
    ],
    "tracks": [
      "VN SPOJ",
      "ICPC-style"
    ],
    "note_path": "practice/ladders/graphs/flow/mincost.md",
    "ladder_path": "practice/ladders/graphs/flow/README.md",
    "tutorial_path": "topics/graphs/flow/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/mincost.cpp"
  },
  {
    "code": "POLICECHASE",
    "title": "Police Chase",
    "full_title": "Police Chase",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1695",
    "main_topic": "Graphs -> Maximum Flow",
    "secondary_topics": [
      "Minimum cut",
      "Cut certificate",
      "Undirected unit-capacity flow"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/flow",
    "topic_tags": [
      "graphs/flow",
      "advanced/optimization-and-duality"
    ],
    "patterns": [
      "unit capacity max flow",
      "residual reachable cut",
      "minimum edge cut certificate"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/flow/policechase.md",
    "ladder_path": "practice/ladders/graphs/flow/README.md",
    "tutorial_path": "topics/graphs/flow/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/policechase.cpp"
  },
  {
    "code": "REACTORCOOLING",
    "title": "Reactor Cooling",
    "full_title": "Reactor Cooling",
    "judge": "Codeforces acmsguru",
    "judge_url": "https://codeforces.com/problemsets/acmsguru/problem/99999/194",
    "main_topic": "Graphs -> Maximum Flow",
    "secondary_topics": [
      "Feasible circulation",
      "Lower bounds",
      "Flow reconstruction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/flow",
    "topic_tags": [
      "graphs/flow",
      "graphs/flow-lower-bounds"
    ],
    "patterns": [
      "feasible circulation",
      "lower bounds",
      "flow reconstruction"
    ],
    "tracks": [
      "Codeforces acmsguru",
      "Advanced techniques"
    ],
    "note_path": "practice/ladders/graphs/flow/reactorcooling.md",
    "ladder_path": "practice/ladders/graphs/flow/README.md",
    "tutorial_path": "topics/graphs/flow/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/reactorcooling.cpp"
  },
  {
    "code": "GENERALMATCHING",
    "title": "Matching on General Graph",
    "full_title": "Matching on General Graph",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/general_matching",
    "main_topic": "Graphs -> Edmonds Blossom / General Matching",
    "secondary_topics": [
      "Edmonds blossom",
      "Maximum cardinality matching",
      "Odd-cycle contraction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/general-matching",
    "topic_tags": [
      "graphs/general-matching"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/general-matching/generalmatching.md",
    "ladder_path": "practice/ladders/graphs/general-matching/README.md",
    "tutorial_path": "topics/graphs/general-matching/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/general-matching/generalmatching.cpp"
  },
  {
    "code": "GLOBALMINCUT",
    "title": "Minimum Cut",
    "full_title": "Minimum Cut",
    "judge": "POJ 2914",
    "judge_url": "http://poj.org/problem?id=2914",
    "main_topic": "Graphs -> Randomized / Global Min-Cut",
    "secondary_topics": [
      "Stoer-Wagner",
      "Global min-cut",
      "Undirected weighted graph"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/global-min-cut",
    "topic_tags": [
      "graphs/global-min-cut"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/global-min-cut/globalmincut.md",
    "ladder_path": "practice/ladders/graphs/global-min-cut/README.md",
    "tutorial_path": "topics/graphs/global-min-cut/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/global-min-cut/globalmincut.cpp"
  },
  {
    "code": "MCQUERY",
    "title": "MinCut Query",
    "full_title": "MCQUERY - MinCut Query",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/MCQUERY/",
    "main_topic": "Graphs -> Gomory-Hu Tree",
    "secondary_topics": [
      "Maximum flow",
      "DSU"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/gomory-hu",
    "topic_tags": [
      "graphs/gomory-hu",
      "data-structures/dsu",
      "graphs/trees"
    ],
    "patterns": [
      "all-pairs min-cut",
      "cut tree",
      "count pairs by threshold"
    ],
    "tracks": [
      "VN SPOJ",
      "ICPC-style"
    ],
    "note_path": "practice/ladders/graphs/gomory-hu/mcquery.md",
    "ladder_path": "practice/ladders/graphs/gomory-hu/README.md",
    "tutorial_path": "topics/graphs/gomory-hu/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/flow/mcquery.cpp"
  },
  {
    "code": "BUILDINGROADS",
    "title": "Building Roads",
    "full_title": "Building Roads",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1666",
    "main_topic": "Graphs -> Graph Modeling",
    "secondary_topics": [
      "Connected components",
      "Component representatives",
      "Constructive output"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "graphs/graph-modeling",
    "topic_tags": [
      "graphs/graph-modeling"
    ],
    "patterns": [
      "connected components",
      "component representatives",
      "constructive graph connection"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/graph-modeling/buildingroads.md",
    "ladder_path": "practice/ladders/graphs/graph-modeling/README.md",
    "tutorial_path": "topics/graphs/graph-modeling/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/graph-modeling/buildingroads.cpp"
  },
  {
    "code": "COUNTINGROOMS",
    "title": "Counting Rooms",
    "full_title": "Counting Rooms",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1192",
    "main_topic": "Graphs -> Graph Modeling",
    "secondary_topics": [
      "Grid graph",
      "Flood fill",
      "Connected components"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "graphs/graph-modeling",
    "topic_tags": [
      "graphs/graph-modeling",
      "graphs/bfs-dfs"
    ],
    "patterns": [
      "grid graph modeling",
      "iterative flood fill",
      "connected components"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/graph-modeling/countingrooms.md",
    "ladder_path": "practice/ladders/graphs/graph-modeling/README.md",
    "tutorial_path": "topics/graphs/graph-modeling/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/graph-modeling/countingrooms.cpp"
  },
  {
    "code": "PATHQUERIES2",
    "title": "Path Queries II",
    "full_title": "PATHQUERIES2 - Path Queries II",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2134",
    "main_topic": "Graphs -> Heavy-Light Decomposition",
    "secondary_topics": [
      "Segment tree",
      "Path maximum queries",
      "Point updates"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/hld",
    "topic_tags": [
      "graphs/hld",
      "graphs/trees",
      "data-structures/segment-tree"
    ],
    "patterns": [
      "heavy light decomposition",
      "path query decomposition",
      "segment tree on base array"
    ],
    "tracks": [
      "CSES",
      "Tree algorithms"
    ],
    "note_path": "practice/ladders/graphs/hld/pathqueries2.md",
    "ladder_path": "practice/ladders/graphs/hld/README.md",
    "tutorial_path": "topics/graphs/hld/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/hld/pathqueries2.cpp"
  },
  {
    "code": "TASKASSIGNMENT",
    "title": "Task Assignment",
    "full_title": "Task Assignment",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2129",
    "main_topic": "Graphs -> Hungarian / Assignment Problem",
    "secondary_topics": [
      "Weighted bipartite matching",
      "Assignment matrix",
      "Perfect matching output"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/hungarian-assignment",
    "topic_tags": [
      "graphs/hungarian-assignment"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/hungarian-assignment/taskassignment.md",
    "ladder_path": "practice/ladders/graphs/hungarian-assignment/README.md",
    "tutorial_path": "topics/graphs/hungarian-assignment/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/hungarian-assignment/taskassignment.cpp"
  },
  {
    "code": "COMPANYQUERIES2",
    "title": "Company Queries II",
    "full_title": "COMPANYQUERIES2 - Company Queries II",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1688",
    "main_topic": "Graphs -> LCA",
    "secondary_topics": [
      "Binary lifting",
      "Depth equalization",
      "Tree path queries"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/lca",
    "topic_tags": [
      "graphs/lca",
      "graphs/trees"
    ],
    "patterns": [
      "binary lifting",
      "depth equalization",
      "lowest common ancestor"
    ],
    "tracks": [
      "CSES",
      "Tree algorithms"
    ],
    "note_path": "practice/ladders/graphs/lca/companyqueries2.md",
    "ladder_path": "practice/ladders/graphs/lca/README.md",
    "tutorial_path": "topics/graphs/lca/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/lca/companyqueries2.cpp"
  },
  {
    "code": "DYNAMICTREEVERTEXADDPATHSUM",
    "title": "Dynamic Tree Vertex Add Path Sum",
    "full_title": "Dynamic Tree Vertex Add Path Sum",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/dynamic_tree_vertex_add_path_sum",
    "main_topic": "Graphs -> Link-Cut Tree",
    "secondary_topics": [
      "Dynamic forest",
      "Preferred paths",
      "Splay-based path aggregate"
    ],
    "difficulty": "very hard",
    "status": "solved",
    "primary_slug": "graphs/link-cut-tree",
    "topic_tags": [
      "graphs/link-cut-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/link-cut-tree/dynamictreevertexaddpathsum.md",
    "ladder_path": "practice/ladders/graphs/link-cut-tree/README.md",
    "tutorial_path": "topics/graphs/link-cut-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/link-cut-tree/dynamictreevertexaddpathsum.cpp"
  },
  {
    "code": "QBFLOWER",
    "title": "Tặng hoa",
    "full_title": "Tặng hoa",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/QBFLOWER/",
    "main_topic": "Graphs -> Matching",
    "secondary_topics": [
      "Minimum edge cover",
      "Edmonds blossom"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/matching",
    "topic_tags": [
      "graphs/matching"
    ],
    "patterns": [
      "minimum edge cover",
      "general matching",
      "graph transformation"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/graphs/matching/qbflower.md",
    "ladder_path": "practice/ladders/graphs/matching/README.md",
    "tutorial_path": "topics/graphs/matching/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/matching/qbflower.cpp"
  },
  {
    "code": "SCHOOLDANCE",
    "title": "School Dance",
    "full_title": "School Dance",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1696",
    "main_topic": "Graphs -> Matching",
    "secondary_topics": [
      "Hopcroft-Karp",
      "Bipartite graph modeling",
      "Matching reconstruction"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/matching",
    "topic_tags": [
      "graphs/matching"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/matching/schooldance.md",
    "ladder_path": "practice/ladders/graphs/matching/README.md",
    "tutorial_path": "topics/graphs/matching/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/matching/schooldance.cpp"
  },
  {
    "code": "ROADREPARATION",
    "title": "Road Reparation",
    "full_title": "Road Reparation",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1675",
    "main_topic": "Graphs -> Minimum Spanning Tree",
    "secondary_topics": [
      "Kruskal",
      "DSU",
      "Connectivity check"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/mst",
    "topic_tags": [
      "graphs/mst"
    ],
    "patterns": [
      "kruskal mst",
      "connectivity check",
      "cut property greedy"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/mst/roadreparation.md",
    "ladder_path": "practice/ladders/graphs/mst/README.md",
    "tutorial_path": "topics/graphs/mst/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/mst/roadreparation.cpp"
  },
  {
    "code": "COURSESCHEDULE",
    "title": "Course Schedule",
    "full_title": "Course Schedule",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1679",
    "main_topic": "Graphs -> Topological Sort And SCC",
    "secondary_topics": [
      "Kahn topological sort",
      "Indegree counting",
      "Directed cycle detection"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/scc-toposort",
    "topic_tags": [
      "graphs/scc-toposort"
    ],
    "patterns": [
      "kahn topological sort",
      "indegree peeling",
      "cycle by failed ordering"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/scc-toposort/courseschedule.md",
    "ladder_path": "practice/ladders/graphs/scc-toposort/README.md",
    "tutorial_path": "topics/graphs/scc-toposort/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/scc-toposort/courseschedule.cpp"
  },
  {
    "code": "QOS",
    "title": "Chất lượng dịch vụ",
    "full_title": "Chất lượng dịch vụ",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/QOS/",
    "main_topic": "Graphs -> Shortest Paths",
    "secondary_topics": [
      "Reverse Dijkstra",
      "DP with slack",
      "K-th lexicographic path"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/shortest-paths",
    "topic_tags": [
      "graphs/shortest-paths",
      "dp/foundations"
    ],
    "patterns": [
      "shortest path plus dp",
      "kth lexicographic path",
      "bounded slack states"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/graphs/shortest-paths/qos.md",
    "ladder_path": "practice/ladders/graphs/shortest-paths/README.md",
    "tutorial_path": "topics/graphs/shortest-paths/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/shortest-paths/qos.cpp"
  },
  {
    "code": "STABLEMARRIAGE",
    "title": "Stable Marriage",
    "full_title": "Stable Marriage",
    "judge": "Canonical Gale-Shapley benchmark",
    "judge_url": "https://www.ams.org/publicoutreach/feature-column/fc-2015-03",
    "main_topic": "Graphs -> Stable Marriage",
    "secondary_topics": [
      "Deferred acceptance",
      "Blocking pairs",
      "Proposer-optimal stable matching"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/stable-marriage",
    "topic_tags": [
      "graphs/stable-marriage"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/stable-marriage/stablemarriage.md",
    "ladder_path": "practice/ladders/graphs/stable-marriage/README.md",
    "tutorial_path": "topics/graphs/stable-marriage/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/stable-marriage/stablemarriage.cpp"
  },
  {
    "code": "VOSTRIP",
    "title": "VOSTRIP",
    "full_title": "VOSTRIP",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VOSTRIP/",
    "main_topic": "Graphs -> Tree DP",
    "secondary_topics": [
      "Path decomposition",
      "Degree pairing",
      "Counting endpoints"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/tree-dp",
    "topic_tags": [
      "graphs/tree-dp",
      "dp/tree-dp",
      "graphs/trees"
    ],
    "patterns": [
      "tree endpoint pairing",
      "path decomposition",
      "local imbalance formula"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/graphs/tree-dp/vostrip.md",
    "ladder_path": "practice/ladders/graphs/tree-dp/README.md",
    "tutorial_path": "topics/dp/tree-dp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/tree-dp/vostrip.cpp"
  },
  {
    "code": "TREEISOMORPHISM1",
    "title": "Tree Isomorphism I",
    "full_title": "Tree Isomorphism I",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1700",
    "main_topic": "Graphs -> Tree Isomorphism",
    "secondary_topics": [
      "Rooted trees",
      "Canonical encoding",
      "AHU-style subtree types"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/tree-isomorphism",
    "topic_tags": [
      "graphs/tree-isomorphism"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/tree-isomorphism/treeisomorphism1.md",
    "ladder_path": "practice/ladders/graphs/tree-isomorphism/README.md",
    "tutorial_path": "topics/graphs/tree-isomorphism/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/tree-isomorphism/treeisomorphism1.cpp"
  },
  {
    "code": "MTREECOL",
    "title": "Color a tree",
    "full_title": "MTREECOL - Color a tree",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/MTREECOL/",
    "main_topic": "Graphs -> Trees",
    "secondary_topics": [
      "Greedy scheduling",
      "Precedence constraints",
      "Tree contraction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/trees",
    "topic_tags": [
      "graphs/trees"
    ],
    "patterns": [
      "ratio greedy",
      "tree contraction",
      "exchange argument"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/graphs/trees/mtreecol.md",
    "ladder_path": "practice/ladders/graphs/trees/README.md",
    "tutorial_path": "topics/graphs/trees/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/trees/mtreecol.cpp"
  },
  {
    "code": "VMWTREE",
    "title": "Lại là cây khung",
    "full_title": "VMWTREE - Lại là cây khung",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/VMWTREE/",
    "main_topic": "Graphs -> Trees",
    "secondary_topics": [
      "Heavy-light decomposition",
      "Implicit treap",
      "Path sequence updates"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "graphs/trees",
    "topic_tags": [
      "graphs/trees",
      "data-structures/segment-tree",
      "graphs/hld"
    ],
    "patterns": [
      "path reverse",
      "path sequence queries",
      "heavy-light decomposition"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/graphs/trees/vmwtree.md",
    "ladder_path": "practice/ladders/graphs/trees/README.md",
    "tutorial_path": "topics/graphs/trees/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/trees/vmwtree.cpp"
  },
  {
    "code": "GIANTPIZZA",
    "title": "Giant Pizza",
    "full_title": "Giant Pizza",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1684",
    "main_topic": "Graphs -> Two-SAT",
    "secondary_topics": [
      "2-SAT",
      "Implication graph",
      "SCC assignment extraction"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "graphs/two-sat",
    "topic_tags": [
      "graphs/two-sat",
      "graphs/graph-modeling",
      "graphs/scc-toposort"
    ],
    "patterns": [
      "2-sat",
      "implication graph",
      "assignment extraction"
    ],
    "tracks": [
      "CSES",
      "Graph algorithms"
    ],
    "note_path": "practice/ladders/graphs/two-sat/giantpizza.md",
    "ladder_path": "practice/ladders/graphs/two-sat/README.md",
    "tutorial_path": "topics/graphs/two-sat/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/two-sat/giantpizza.cpp"
  },
  {
    "code": "KINGDOMANDITSCITIES",
    "title": "Kingdom and its Cities",
    "full_title": "Kingdom and its Cities",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/613/D",
    "main_topic": "Graphs -> Virtual Tree / Auxiliary Tree",
    "secondary_topics": [
      "Marked subset queries",
      "Tree DP",
      "Minimum separator"
    ],
    "difficulty": "very hard",
    "status": "solved",
    "primary_slug": "graphs/virtual-tree",
    "topic_tags": [
      "graphs/virtual-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/graphs/virtual-tree/kingdomanditscities.md",
    "ladder_path": "practice/ladders/graphs/virtual-tree/README.md",
    "tutorial_path": "topics/graphs/virtual-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/graphs/virtual-tree/kingdomanditscities.cpp"
  },
  {
    "code": "HUFFMANCODING",
    "title": "Huffman Coding Benchmark",
    "full_title": "Huffman Coding Benchmark",
    "judge": "Canonical greedy prefix-code benchmark",
    "judge_url": "https://algs4.cs.princeton.edu/code/javadoc/edu/princeton/cs/algs4/Huffman.html",
    "main_topic": "Greedy -> Huffman / Data Compression",
    "secondary_topics": [
      "Optimal merge",
      "Prefix codes",
      "Weighted path length"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "greedy/huffman-data-compression",
    "topic_tags": [
      "greedy/huffman-data-compression"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/greedy/huffman-data-compression/huffmancoding.md",
    "ladder_path": "practice/ladders/greedy/huffman-data-compression/README.md",
    "tutorial_path": "topics/greedy/huffman-data-compression/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/greedy/huffman-data-compression/huffmancoding.cpp"
  },
  {
    "code": "LEMONADELINE",
    "title": "Lemonade Line",
    "full_title": "Lemonade Line",
    "judge": "USACO 2018 US Open Silver",
    "judge_url": "https://usaco.org/index.php?cpid=835&page=viewproblem2",
    "main_topic": "Greedy -> Prefix Constraints",
    "secondary_topics": [
      "Sorting",
      "Threshold feasibility",
      "Exchange argument"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "greedy/prefix-constraints",
    "topic_tags": [
      "greedy/prefix-constraints",
      "foundations/sorting"
    ],
    "patterns": [
      "descending tolerance order",
      "prefix feasibility count",
      "minimize accepted arrivals"
    ],
    "tracks": [
      "USACO",
      "Greedy"
    ],
    "note_path": "practice/ladders/greedy/prefix-constraints/lemonadeline.md",
    "ladder_path": "practice/ladders/greedy/prefix-constraints/README.md",
    "tutorial_path": "topics/greedy/prefix-constraints/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/greedy/prefix-constraints/lemonadeline.cpp"
  },
  {
    "code": "PREFIXSUMADDICTS",
    "title": "Prefix Sum Addicts",
    "full_title": "Prefix Sum Addicts",
    "judge": "Codeforces",
    "judge_url": "https://codeforces.com/problemset/problem/1738/B",
    "main_topic": "Greedy -> Prefix Constraints",
    "secondary_topics": [
      "Prefix sums",
      "Difference reasoning",
      "Feasibility check"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "greedy/prefix-constraints",
    "topic_tags": [
      "greedy/prefix-constraints",
      "foundations/prefix-sums"
    ],
    "patterns": [
      "suffix prefix differences",
      "sorted sequence feasibility",
      "first block capacity bound"
    ],
    "tracks": [
      "Codeforces",
      "Greedy"
    ],
    "note_path": "practice/ladders/greedy/prefix-constraints/prefixsumaddicts.md",
    "ladder_path": "practice/ladders/greedy/prefix-constraints/README.md",
    "tutorial_path": "topics/greedy/prefix-constraints/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/greedy/prefix-constraints/prefixsumaddicts.cpp"
  },
  {
    "code": "VODIVIDE",
    "title": "Chia phần",
    "full_title": "Chia phần",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/VODIVIDE/",
    "main_topic": "Greedy -> Prefix Constraints",
    "secondary_topics": [
      "Sorting",
      "Laminar constraints",
      "Pair reconstruction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "greedy/prefix-constraints",
    "topic_tags": [
      "greedy/prefix-constraints"
    ],
    "patterns": [
      "prefix quota greedy",
      "heap maintenance",
      "pair reconstruction"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/greedy/prefix-constraints/vodivide.md",
    "ladder_path": "practice/ladders/greedy/prefix-constraints/README.md",
    "tutorial_path": "topics/greedy/prefix-constraints/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/greedy/prefix-constraints/vodivide.cpp"
  },
  {
    "code": "KTHTERMOFLINEARLYRECURRENTSEQUENCE",
    "title": "K-th Term of Linearly Recurrent Sequence",
    "full_title": "K-th Term of Linearly Recurrent Sequence",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/kth_term_of_linearly_recurrent_sequence",
    "main_topic": "Math -> Berlekamp-Massey / Kitamasa",
    "secondary_topics": [
      "Kitamasa",
      "Characteristic polynomial reduction",
      "Modular arithmetic"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/berlekamp-massey-kitamasa",
    "topic_tags": [
      "math/berlekamp-massey-kitamasa"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/berlekamp-massey-kitamasa/kthtermoflinearlyrecurrentsequence.md",
    "ladder_path": "practice/ladders/math/berlekamp-massey-kitamasa/README.md",
    "tutorial_path": "topics/math/berlekamp-massey-kitamasa/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/berlekamp-massey-kitamasa/kthtermoflinearlyrecurrentsequence.cpp"
  },
  {
    "code": "DISCRETELOGARITHMMOD",
    "title": "Discrete Logarithm Mod",
    "full_title": "Discrete Logarithm Mod",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/discrete_logarithm_mod",
    "main_topic": "Math -> BSGS / Discrete Log",
    "secondary_topics": [
      "Baby-step giant-step",
      "Meet-in-the-middle",
      "gcd reduction"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/bsgs-discrete-log",
    "topic_tags": [
      "math/bsgs-discrete-log"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/bsgs-discrete-log/discretelogarithmmod.md",
    "ladder_path": "practice/ladders/math/bsgs-discrete-log/README.md",
    "tutorial_path": "topics/math/bsgs-discrete-log/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/bsgs-discrete-log/discretelogarithmmod.cpp"
  },
  {
    "code": "GENERALCHINESEREMAINDER",
    "title": "Chinese Remainder Theorem (non-relatively prime moduli)",
    "full_title": "Chinese Remainder Theorem (non-relatively prime moduli)",
    "judge": "Kattis",
    "judge_url": "https://open.kattis.com/problems/generalchineseremainder",
    "main_topic": "Math -> Chinese Remainder And Linear Congruences",
    "secondary_topics": [
      "Chinese remainder theorem",
      "Extended Euclid",
      "Congruence merge"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/chinese-remainder",
    "topic_tags": [
      "math/chinese-remainder"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/chinese-remainder/generalchineseremainder.md",
    "ladder_path": "practice/ladders/math/chinese-remainder/README.md",
    "tutorial_path": "topics/math/chinese-remainder/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/chinese-remainder/generalchineseremainder.cpp"
  },
  {
    "code": "SUMOFDIVISORS",
    "title": "Sum of Divisors",
    "full_title": "Sum of Divisors",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1082",
    "main_topic": "Math -> Dirichlet Convolution / Prefix Sums Of Number-Theoretic Functions",
    "secondary_topics": [
      "Dirichlet convolution",
      "Summatory sigma",
      "Quotient grouping"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/dirichlet-prefix-sums",
    "topic_tags": [
      "math/dirichlet-prefix-sums"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/dirichlet-prefix-sums/sumofdivisors.md",
    "ladder_path": "practice/ladders/math/dirichlet-prefix-sums/README.md",
    "tutorial_path": "topics/math/dirichlet-prefix-sums/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/dirichlet-prefix-sums/sumofdivisors.cpp"
  },
  {
    "code": "CONVOLUTION",
    "title": "Convolution",
    "full_title": "Convolution",
    "judge": "AtCoder Library Practice Contest",
    "judge_url": "https://atcoder.jp/contests/practice2/tasks/practice2_f",
    "main_topic": "Math -> FFT And NTT",
    "secondary_topics": [
      "NTT",
      "Exact modular convolution",
      "998244353"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/fft",
    "topic_tags": [
      "math/fft"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/fft/convolution.md",
    "ladder_path": "practice/ladders/math/fft/README.md",
    "tutorial_path": "topics/math/fft-ntt/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/fft/convolution.cpp"
  },
  {
    "code": "POST2",
    "title": "A cộng B version 2",
    "full_title": "A cộng B version 2",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/POST2/",
    "main_topic": "Math -> FFT And NTT",
    "secondary_topics": [
      "Polynomial convolution",
      "Frequency counting"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/fft",
    "topic_tags": [
      "math/fft"
    ],
    "patterns": [
      "convolution",
      "digit aggregation",
      "big integer addition"
    ],
    "tracks": [
      "VN SPOJ",
      "ICPC-style"
    ],
    "note_path": "practice/ladders/math/fft/post2.md",
    "ladder_path": "practice/ladders/math/fft/README.md",
    "tutorial_path": "topics/math/fft-ntt/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/fft/post2.cpp"
  },
  {
    "code": "SNIM",
    "title": "S-Nim",
    "full_title": "S-Nim",
    "judge": "Kattis",
    "judge_url": "https://open.kattis.com/problems/snim",
    "main_topic": "Math -> Game Theory / Sprague-Grundy",
    "secondary_topics": [
      "Sprague-Grundy",
      "Subtraction game",
      "Nim sum"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/game-theory",
    "topic_tags": [
      "math/game-theory"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/game-theory/snim.md",
    "ladder_path": "practice/ladders/math/game-theory/README.md",
    "tutorial_path": "topics/math/game-theory/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/game-theory/snim.cpp"
  },
  {
    "code": "SYSTEMOFLINEAREQUATIONS",
    "title": "System of Linear Equations",
    "full_title": "System of Linear Equations",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/3154",
    "main_topic": "Math -> Gaussian Elimination And Linear Algebra",
    "secondary_topics": [
      "Gaussian elimination",
      "Linear algebra",
      "Modular inverse"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/gaussian-elimination",
    "topic_tags": [
      "math/gaussian-elimination"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/gaussian-elimination/systemoflinearequations.md",
    "ladder_path": "practice/ladders/math/gaussian-elimination/README.md",
    "tutorial_path": "topics/math/gaussian-elimination/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/gaussian-elimination/systemoflinearequations.cpp"
  },
  {
    "code": "COMMONDIVISORS",
    "title": "Common Divisors",
    "full_title": "Common Divisors",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1081",
    "main_topic": "Math -> GCD And LCM",
    "secondary_topics": [
      "Frequency over divisors",
      "Divisibility counting",
      "Greatest common divisor"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/gcd-lcm",
    "topic_tags": [
      "math/gcd-lcm",
      "math/number-theory-basics"
    ],
    "patterns": [
      "divisor frequency scan",
      "count multiples",
      "maximize pair gcd"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/math/gcd-lcm/commondivisors.md",
    "ladder_path": "practice/ladders/math/gcd-lcm/README.md",
    "tutorial_path": "topics/math/number-theory-basics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/gcd-lcm/commondivisors.cpp"
  },
  {
    "code": "CRYPTKEY",
    "title": "Chìa khóa mã số",
    "full_title": "Chìa khóa mã số",
    "judge": "VN SPOJ",
    "judge_url": "https://vn.spoj.com/problems/CRYPTKEY/",
    "main_topic": "Math -> GCD And LCM",
    "secondary_topics": [
      "Prime factorization",
      "Closure under operations",
      "Necessary and sufficient condition"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/gcd-lcm",
    "topic_tags": [
      "math/gcd-lcm",
      "math/number-theory-basics"
    ],
    "patterns": [
      "gcd-lcm closure",
      "prime-power characterization",
      "constructibility"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/math/gcd-lcm/cryptkey.md",
    "ladder_path": "practice/ladders/math/gcd-lcm/README.md",
    "tutorial_path": "topics/math/number-theory-basics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/gcd-lcm/cryptkey.cpp"
  },
  {
    "code": "EUCLIDPROBLEM",
    "title": "Euclid Problem",
    "full_title": "Euclid Problem",
    "judge": "UVa",
    "judge_url": "https://onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1045",
    "main_topic": "Math -> GCD And LCM",
    "secondary_topics": [
      "Extended Euclid",
      "Bezout coefficients",
      "Diophantine witness"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/gcd-lcm",
    "topic_tags": [
      "math/gcd-lcm"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/gcd-lcm/euclidproblem.md",
    "ladder_path": "practice/ladders/math/gcd-lcm/README.md",
    "tutorial_path": "topics/math/number-theory-basics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/gcd-lcm/euclidproblem.cpp"
  },
  {
    "code": "GCDONBLACKBOARD",
    "title": "GCD on Blackboard",
    "full_title": "GCD on Blackboard",
    "judge": "AtCoder",
    "judge_url": "https://atcoder.jp/contests/abc125/tasks/abc125_c",
    "main_topic": "Math -> GCD And LCM",
    "secondary_topics": [
      "Prefix/suffix gcd",
      "Remove one element",
      "Array gcd"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/gcd-lcm",
    "topic_tags": [
      "math/gcd-lcm",
      "math/number-theory-basics"
    ],
    "patterns": [
      "prefix suffix gcd",
      "remove one element",
      "maximize array gcd"
    ],
    "tracks": [
      "AtCoder",
      "Number theory"
    ],
    "note_path": "practice/ladders/math/gcd-lcm/gcdonblackboard.md",
    "ladder_path": "practice/ladders/math/gcd-lcm/README.md",
    "tutorial_path": "topics/math/number-theory-basics/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/gcd-lcm/gcdonblackboard.cpp"
  },
  {
    "code": "THROWINGDICE",
    "title": "Throwing Dice",
    "full_title": "Throwing Dice",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1096",
    "main_topic": "Math -> Linear Recurrence And Matrix Exponentiation",
    "secondary_topics": [
      "Matrix exponentiation",
      "Linear recurrence",
      "Companion matrix"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/linear-recurrence",
    "topic_tags": [
      "math/linear-recurrence"
    ],
    "patterns": [
      "linear recurrence",
      "companion matrix",
      "matrix exponentiation"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/math/linear-recurrence/throwingdice.md",
    "ladder_path": "practice/ladders/math/linear-recurrence/README.md",
    "tutorial_path": "topics/math/linear-recurrence/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/linear-recurrence/throwingdice.cpp"
  },
  {
    "code": "BINOMIALCOEFFICIENTPRIMEMOD",
    "title": "Binomial Coefficient (Prime Mod)",
    "full_title": "Binomial Coefficient (Prime Mod)",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/binomial_coefficient_prime_mod",
    "main_topic": "Math -> Lucas Theorem And Large Binomial Mod Prime",
    "secondary_topics": [
      "Lucas theorem",
      "Binomial coefficients",
      "Prime modulus"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/lucas-theorem",
    "topic_tags": [
      "math/lucas-theorem"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/lucas-theorem/binomialcoefficientprimemod.md",
    "ladder_path": "practice/ladders/math/lucas-theorem/README.md",
    "tutorial_path": "topics/math/lucas-theorem/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/lucas-theorem/binomialcoefficientprimemod.cpp"
  },
  {
    "code": "SUMOFTOTIENTFUNCTION",
    "title": "Sum of Totient Function",
    "full_title": "Sum of Totient Function",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/sum_of_totient_function",
    "main_topic": "Math -> Min_25 / Du Jiao",
    "secondary_topics": [
      "Du Jiao sieve",
      "Quotient set",
      "Dirichlet inverse recurrence"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/min25-du-jiao",
    "topic_tags": [
      "math/min25-du-jiao"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/min25-du-jiao/sumoftotientfunction.md",
    "ladder_path": "practice/ladders/math/min25-du-jiao/README.md",
    "tutorial_path": "topics/math/min25-du-jiao/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/min25-du-jiao/sumoftotientfunction.cpp"
  },
  {
    "code": "COUNTINGCOPRIMEPAIRS",
    "title": "Counting Coprime Pairs",
    "full_title": "Counting Coprime Pairs",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2417",
    "main_topic": "Math -> Mobius And Multiplicative Counting",
    "secondary_topics": [
      "Mobius inversion",
      "Divisor-frequency counting",
      "Linear sieve"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/mobius-multiplicative",
    "topic_tags": [
      "math/mobius-multiplicative"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/mobius-multiplicative/countingcoprimepairs.md",
    "ladder_path": "practice/ladders/math/mobius-multiplicative/README.md",
    "tutorial_path": "topics/math/mobius-multiplicative/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/mobius-multiplicative/countingcoprimepairs.cpp"
  },
  {
    "code": "EXPONENTIATION",
    "title": "Exponentiation",
    "full_title": "Exponentiation",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1095",
    "main_topic": "Math -> Modular Arithmetic",
    "secondary_topics": [
      "Binary exponentiation",
      "Modulo arithmetic",
      "Fast power"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "math/modular-arithmetic",
    "topic_tags": [
      "math/modular-arithmetic"
    ],
    "patterns": [
      "binary exponentiation",
      "repeated squaring",
      "modular fast power"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/math/modular-arithmetic/exponentiation.md",
    "ladder_path": "practice/ladders/math/modular-arithmetic/README.md",
    "tutorial_path": "topics/math/modular-arithmetic/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/modular-arithmetic/exponentiation.cpp"
  },
  {
    "code": "EXPONENTIATION2",
    "title": "Exponentiation II",
    "full_title": "Exponentiation II",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1712",
    "main_topic": "Math -> Modular Arithmetic",
    "secondary_topics": [
      "Binary exponentiation",
      "Fermat reduction",
      "Zero-exponent edge case"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/modular-arithmetic",
    "topic_tags": [
      "math/modular-arithmetic"
    ],
    "patterns": [
      "binary exponentiation",
      "fermat exponent reduction",
      "zero exponent edge case"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/math/modular-arithmetic/exponentiation2.md",
    "ladder_path": "practice/ladders/math/modular-arithmetic/README.md",
    "tutorial_path": "topics/math/modular-arithmetic/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/modular-arithmetic/exponentiation2.cpp"
  },
  {
    "code": "SQRTMOD",
    "title": "Sqrt Mod",
    "full_title": "Sqrt Mod",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/sqrt_mod",
    "main_topic": "Math -> Modular Square Root / Discrete Root",
    "secondary_topics": [
      "Quadratic residues",
      "Tonelli-Shanks",
      "Modular arithmetic"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/modular-square-root-discrete-root",
    "topic_tags": [
      "math/modular-square-root-discrete-root"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/modular-square-root-discrete-root/sqrtmod.md",
    "ladder_path": "practice/ladders/math/modular-square-root-discrete-root/README.md",
    "tutorial_path": "topics/math/modular-square-root-discrete-root/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/modular-square-root-discrete-root/sqrtmod.cpp"
  },
  {
    "code": "COUNTINGDIVISORS",
    "title": "Counting Divisors",
    "full_title": "Counting Divisors",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1713",
    "main_topic": "Math -> Number Theory Basics",
    "secondary_topics": [
      "Divisor counting",
      "Sieve preprocessing",
      "Prime exponents"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "math/number-theory-basics",
    "topic_tags": [
      "math/number-theory-basics",
      "math/gcd-lcm"
    ],
    "patterns": [
      "divisor sieve",
      "many queries preprocessing",
      "divisor counting"
    ],
    "tracks": [
      "CSES",
      "Mathematics"
    ],
    "note_path": "practice/ladders/math/number-theory-basics/countingdivisors.md",
    "ladder_path": "practice/ladders/math/number-theory-basics/README.md",
    "tutorial_path": "topics/math/gcd-lcm/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/number-theory-basics/countingdivisors.cpp"
  },
  {
    "code": "LAMP",
    "title": "Dàn đèn màu",
    "full_title": "LAMP - Dàn đèn màu",
    "judge": "VN SPOJ / VNOI",
    "judge_url": "https://vn.spoj.com/problems/LAMP/",
    "main_topic": "Math -> Number Theory Basics",
    "secondary_topics": [
      "Asymptotic density",
      "Pairwise coprime numbers",
      "Exact big fractions"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/number-theory-basics",
    "topic_tags": [
      "math/number-theory-basics",
      "math/gcd-lcm",
      "combinatorics/inclusion-exclusion"
    ],
    "patterns": [
      "density formula",
      "pairwise coprime products",
      "big integer fractions"
    ],
    "tracks": [
      "VN SPOJ",
      "OI-style"
    ],
    "note_path": "practice/ladders/math/number-theory-basics/lamp.md",
    "ladder_path": "practice/ladders/math/number-theory-basics/README.md",
    "tutorial_path": "topics/math/gcd-lcm/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/number-theory-basics/lamp.cpp"
  },
  {
    "code": "FACTORIZE",
    "title": "Factorize",
    "full_title": "Factorize",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/factorize",
    "main_topic": "Math -> Pollard-Rho",
    "secondary_topics": [
      "Miller-Rabin",
      "Pollard-Rho",
      "64-bit factorization"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/pollard-rho",
    "topic_tags": [
      "math/pollard-rho"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/pollard-rho/factorize.md",
    "ladder_path": "practice/ladders/math/pollard-rho/README.md",
    "tutorial_path": "topics/math/pollard-rho/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/pollard-rho/factorize.cpp"
  },
  {
    "code": "INVOFFORMALPOWERSERIES",
    "title": "Inv of Formal Power Series",
    "full_title": "Inv of Formal Power Series",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/inv_of_formal_power_series",
    "main_topic": "Math -> Polynomial / Formal Power Series",
    "secondary_topics": [
      "Formal power series",
      "NTT",
      "Newton iteration"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/polynomial-fps",
    "topic_tags": [
      "math/polynomial-fps"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/polynomial-fps/invofformalpowerseries.md",
    "ladder_path": "practice/ladders/math/polynomial-fps/README.md",
    "tutorial_path": "topics/math/polynomial-fps/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/polynomial-fps/invofformalpowerseries.cpp"
  },
  {
    "code": "PRIMITIVEROOT",
    "title": "Primitive Root",
    "full_title": "Primitive Root",
    "judge": "Library Checker",
    "judge_url": "https://judge.yosupo.jp/problem/primitive_root",
    "main_topic": "Math -> Primitive Root",
    "secondary_topics": [
      "Generator test",
      "Factorization of p-1",
      "Fast power"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "math/primitive-root",
    "topic_tags": [
      "math/primitive-root"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/primitive-root/primitiveroot.md",
    "ladder_path": "practice/ladders/math/primitive-root/README.md",
    "tutorial_path": "topics/math/primitive-root/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/primitive-root/primitiveroot.cpp"
  },
  {
    "code": "DICEPROBABILITY",
    "title": "Dice Probability",
    "full_title": "Dice Probability",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1725",
    "main_topic": "Math -> Probability",
    "secondary_topics": [
      "Probability DP",
      "Distributions",
      "Expected value compare"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/probability",
    "topic_tags": [
      "math/probability"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/probability/diceprobability.md",
    "ladder_path": "practice/ladders/math/probability/README.md",
    "tutorial_path": "topics/math/probability/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/probability/diceprobability.cpp"
  },
  {
    "code": "XMAX",
    "title": "XOR Maximization",
    "full_title": "XMAX - XOR Maximization",
    "judge": "SPOJ",
    "judge_url": "https://www.spoj.com/problems/XMAX/",
    "main_topic": "Math -> XOR Basis / Linear Basis",
    "secondary_topics": [
      "XOR basis",
      "Linear independence over GF(2)",
      "Maximum subset xor"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "math/xor-basis",
    "topic_tags": [
      "math/xor-basis"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/math/xor-basis/xmax.md",
    "ladder_path": "practice/ladders/math/xor-basis/README.md",
    "tutorial_path": "topics/math/xor-basis/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/math/xor-basis/xmax.cpp"
  },
  {
    "code": "FINDINGPATTERNS",
    "title": "Finding Patterns",
    "full_title": "Finding Patterns",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2102",
    "main_topic": "Strings -> Aho-Corasick",
    "secondary_topics": [
      "Trie automaton",
      "Failure links",
      "Failure-tree propagation"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/aho-corasick",
    "topic_tags": [
      "strings/aho-corasick",
      "strings/trie"
    ],
    "patterns": [
      "aho-corasick automaton",
      "failure links",
      "multi-pattern presence queries"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/aho-corasick/findingpatterns.md",
    "ladder_path": "practice/ladders/strings/aho-corasick/README.md",
    "tutorial_path": "topics/strings/aho-corasick/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/aho-corasick/findingpatterns.cpp"
  },
  {
    "code": "DISTINCTPALINDROMICSUBSTRINGS",
    "title": "Distinct Palindromic Substrings",
    "full_title": "Distinct Palindromic Substrings",
    "judge": "Timus",
    "judge_url": "https://acm.timus.ru/problem.aspx?num=1960&space=1",
    "main_topic": "Strings -> Eertree / Palindromic Tree",
    "secondary_topics": [
      "Eertree",
      "Distinct palindromes",
      "Append-only string"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/eertree",
    "topic_tags": [
      "strings/eertree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/strings/eertree/distinctpalindromicsubstrings.md",
    "ladder_path": "practice/ladders/strings/eertree/README.md",
    "tutorial_path": "topics/strings/eertree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/eertree/distinctpalindromicsubstrings.cpp"
  },
  {
    "code": "FINDINGBORDERS",
    "title": "Finding Borders",
    "full_title": "Finding Borders",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1732",
    "main_topic": "Strings -> Hashing",
    "secondary_topics": [
      "Prefix-suffix equality",
      "Proper borders",
      "Collision awareness"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "strings/hashing",
    "topic_tags": [
      "strings/hashing",
      "advanced/randomized-algorithms"
    ],
    "patterns": [
      "rolling hash",
      "prefix-suffix equality",
      "proper borders enumeration"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/hashing/findingborders.md",
    "ladder_path": "practice/ladders/strings/hashing/README.md",
    "tutorial_path": "topics/strings/hashing/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/hashing/findingborders.cpp"
  },
  {
    "code": "STRINGMATCHING",
    "title": "String Matching",
    "full_title": "String Matching",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1753",
    "main_topic": "Strings -> KMP",
    "secondary_topics": [
      "Prefix function",
      "Border fallback",
      "Overlapping matches"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "strings/kmp",
    "topic_tags": [
      "strings/kmp"
    ],
    "patterns": [
      "prefix function",
      "border fallback",
      "overlapping occurrence counting"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/kmp/stringmatching.md",
    "ladder_path": "practice/ladders/strings/kmp/README.md",
    "tutorial_path": "topics/strings/kmp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/kmp/stringmatching.cpp"
  },
  {
    "code": "LONGESTPALINDROME",
    "title": "Longest Palindrome",
    "full_title": "Longest Palindrome",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1111",
    "main_topic": "Strings -> Palindromes / Manacher",
    "secondary_topics": [
      "Manacher",
      "Odd/even centers",
      "Longest palindromic substring"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/palindromes",
    "topic_tags": [
      "strings/palindromes"
    ],
    "patterns": [
      "manacher",
      "odd/even centers",
      "longest palindromic substring"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/palindromes/longestpalindrome.md",
    "ladder_path": "practice/ladders/strings/palindromes/README.md",
    "tutorial_path": "topics/strings/palindromes/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/palindromes/longestpalindrome.cpp"
  },
  {
    "code": "REGEXMEMBERSHIP",
    "title": "Regex Membership",
    "full_title": "Regex Membership",
    "judge": "Canonical Thompson-NFA benchmark",
    "judge_url": "https://algs4.cs.princeton.edu/54regexp/",
    "main_topic": "Strings -> Regular Expressions / Finite Automata",
    "secondary_topics": [
      "Thompson construction",
      "Epsilon closure",
      "Active-state-set simulation"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/regex-finite-automata",
    "topic_tags": [
      "strings/regex-finite-automata"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/strings/regex-finite-automata/regexmembership.md",
    "ladder_path": "practice/ladders/strings/regex-finite-automata/README.md",
    "tutorial_path": "topics/strings/regex-finite-automata/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/regex-finite-automata/regexmembership.cpp"
  },
  {
    "code": "REPEATINGSUBSTRING",
    "title": "Repeating Substring",
    "full_title": "Repeating Substring",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2106",
    "main_topic": "Strings -> Suffix Array And LCP",
    "secondary_topics": [
      "Doubling suffix array",
      "Kasai LCP",
      "Longest repeated substring"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/suffix-array-lcp",
    "topic_tags": [
      "strings/suffix-array-lcp"
    ],
    "patterns": [
      "suffix array doubling",
      "kasai lcp",
      "maximum adjacent lcp"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/suffix-array-lcp/repeatingsubstring.md",
    "ladder_path": "practice/ladders/strings/suffix-array-lcp/README.md",
    "tutorial_path": "topics/strings/suffix-array-lcp/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/suffix-array-lcp/repeatingsubstring.cpp"
  },
  {
    "code": "DISTINCTSUBSTRINGS",
    "title": "Distinct Substrings",
    "full_title": "Distinct Substrings",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2105",
    "main_topic": "Strings -> Suffix Automaton",
    "secondary_topics": [
      "State length intervals",
      "Suffix links",
      "Online construction"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/suffix-automaton",
    "topic_tags": [
      "strings/suffix-automaton",
      "strings/suffix-array-lcp"
    ],
    "patterns": [
      "suffix automaton construction",
      "clone states",
      "state contribution counting"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/suffix-automaton/distinctsubstrings.md",
    "ladder_path": "practice/ladders/strings/suffix-automaton/README.md",
    "tutorial_path": "topics/strings/suffix-automaton/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/suffix-automaton/distinctsubstrings.cpp"
  },
  {
    "code": "PATTERNPOSITIONS",
    "title": "Pattern Positions",
    "full_title": "Pattern Positions",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2104",
    "main_topic": "Strings -> Suffix Tree",
    "secondary_topics": [
      "Compressed suffix trie",
      "Edge-interval matching",
      "Subtree minimum"
    ],
    "difficulty": "hard",
    "status": "solved",
    "primary_slug": "strings/suffix-tree",
    "topic_tags": [
      "strings/suffix-tree"
    ],
    "patterns": [],
    "tracks": [],
    "note_path": "practice/ladders/strings/suffix-tree/patternpositions.md",
    "ladder_path": "practice/ladders/strings/suffix-tree/README.md",
    "tutorial_path": "topics/strings/suffix-tree/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/suffix-tree/patternpositions.cpp"
  },
  {
    "code": "WORDCOMBINATIONS",
    "title": "Word Combinations",
    "full_title": "Word Combinations",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1731",
    "main_topic": "Strings -> Trie",
    "secondary_topics": [
      "DP on suffixes",
      "Dictionary segmentation",
      "Duplicate words"
    ],
    "difficulty": "medium",
    "status": "solved",
    "primary_slug": "strings/trie",
    "topic_tags": [
      "strings/trie"
    ],
    "patterns": [
      "trie plus dp",
      "dictionary segmentation",
      "suffix counting"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/trie/wordcombinations.md",
    "ladder_path": "practice/ladders/strings/trie/README.md",
    "tutorial_path": "topics/strings/trie/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/trie/wordcombinations.cpp"
  },
  {
    "code": "FINDINGPERIODS",
    "title": "Finding Periods",
    "full_title": "Finding Periods",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/1733",
    "main_topic": "Strings -> Z-Function",
    "secondary_topics": [
      "String periodicity",
      "Prefix alignment",
      "Suffix covered by prefix"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "strings/z-function",
    "topic_tags": [
      "strings/z-function",
      "strings/kmp"
    ],
    "patterns": [
      "period detection",
      "z function prefix matches",
      "suffix prefix coverage"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/z-function/findingperiods.md",
    "ladder_path": "practice/ladders/strings/z-function/README.md",
    "tutorial_path": "topics/strings/z-function/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/z-function/findingperiods.cpp"
  },
  {
    "code": "STRINGFUNCTIONS",
    "title": "String Functions",
    "full_title": "String Functions",
    "judge": "CSES",
    "judge_url": "https://cses.fi/problemset/task/2107",
    "main_topic": "Strings -> Z-Function",
    "secondary_topics": [
      "Prefix function",
      "Borders",
      "Prefix structure diagnostics"
    ],
    "difficulty": "easy",
    "status": "solved",
    "primary_slug": "strings/z-function",
    "topic_tags": [
      "strings/z-function",
      "strings/kmp"
    ],
    "patterns": [
      "z function",
      "prefix function",
      "prefix structure diagnostics"
    ],
    "tracks": [
      "CSES",
      "String algorithms"
    ],
    "note_path": "practice/ladders/strings/z-function/stringfunctions.md",
    "ladder_path": "practice/ladders/strings/z-function/README.md",
    "tutorial_path": "topics/strings/z-function/README.md",
    "solution_url": "https://github.com/mtuann/competitive-programming-cpp/blob/main/solutions/strings/z-function/stringfunctions.cpp"
  }
]
