Overview
Miscellaneous utilities and helper functions for competitive programming including debugging tools, bit manipulation, coordinate compression, and various utility functions.Debugging
Comprehensive debugging utilities adapted from tourist’s library (Gennady Korotkevich).- Primitives: int, long long, char, bool, string
- Containers: vector, set, map, unordered_map, queue, stack, priority_queue
- Pairs and tuples
- Custom types with to_string overload
Bit Manipulation
Efficient bit operations using GCC built-in functions.Basic Bit Operations
Hamming Distance
Bit Tricks Cheat Sheet
Iterate Over Set Bits
Iterate Over Submasks
Coordinate Compression
Maps large coordinate values to smaller indices.Y-Combinator
Enables lambda recursion in C++.Utility Functions
Argsort
Returns indices that would sort the array.Unique Elements
Removes duplicates from a vector.Min/Max Macros
Infinity Values
Direction Arrays
Reverse Operations
Data Types
Common Type Aliases
128-bit Integer
N-Dimensional Vector
Pragmas
Random Utilities
Generate random values for testing and stress testing.random(from, to)
random_init.cpp
random_vector(n, from, to)
random_vector.cpp
random_permutation(n, start)
random_permutation.cpp
start.
Usage Example:
STD Library Utilities
Useful utilities for working with standard library containers.find_nearest(set, target)
std_library_find_nearest_set.cpp
Rope (GNU Extension)
std_library_rope.cpp
push_back(val)- O(log n)pop_back()- O(log n)insert(i, rope)- O(log n) to O(n)erase(i, n)- O(log n)substr(i, n)- O(log n)replace(i, n, rope)- O(log n)- Concatenation with
+- O(1)
Available Utilities
| Utility | File | Purpose |
|---|---|---|
| Debug | misc_debug.cpp | Print debugging |
| Bits | misc_bits.cpp | Bit manipulation |
| Coordinate Compression | misc_coordinate_compression.cpp | Map large values |
| Y-Combinator | misc_y_combinator.cpp | Lambda recursion |
| Argsort | misc_argsort.cpp | Sort indices |
| Unique | misc_unique.cpp | Remove duplicates |
| Min/Max | misc_min_max.cpp | Multi-argument min/max |
| Infinity | misc_infinity.cpp | Infinity constants |
| Directions | misc_directions.cpp | Grid movement |
| Data Types | misc_data_types.cpp | Type aliases |
| Integer128 | misc_integer128.cpp | 128-bit integers |
| N-D Vector | misc_vector_n_d.cpp | Multi-dimensional vectors |
| Pairs | misc_pairs.cpp | Pair utilities |
| Loops | misc_loops.cpp | Loop macros |
| Math | misc_math.cpp | Math utilities |
| Date | misc_date.cpp | Date calculations |
| Pragma | misc_pragma.cpp | Compiler optimizations |
| Format Answer | misc_format_problem_answer.cpp | Output formatting |
| Random | random_init.cpp | Random value generation |
| Random Vector | random_vector.cpp | Random vector generation |
| Random Permutation | random_permutation.cpp | Random permutations |
| Find Nearest Set | std_library_find_nearest_set.cpp | Find nearest element in set |
| Rope | std_library_rope.cpp | Tree-based string structure |
Tips
Use Debug Liberally
Debug statements help catch errors early, automatically disabled on OJ
Bit Operations
GCC built-ins are fast and portable across platforms
Coordinate Compression
Essential for problems with large coordinate ranges
Y-Combinator
Cleaner than separate function definitions for DFS/DP
See Also
Data Structures
Advanced data structures
Techniques
Algorithmic techniques