diff --git a/structure/bitmask.cpp b/structure/bitmask.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f6c8e2c7c4c71c66fc63013f79006f17a8d6f56b --- /dev/null +++ b/structure/bitmask.cpp @@ -0,0 +1,40 @@ +/** + * Bitmask + * Complexity (Time): O(1) + * Complexity (Space): O(1) + */ + +// Set bit in position pos (0 to 1) +void set(ll &bitmask, int pos) { + bitmask |= (1 << pos); +} + +// Set all bits in a bitmask with size n +void set_all(ll &bitmask, int n) { + bitmask = (1 << n) - 1; +} + +// Unset bit in position pos (1 to 0) +void unset(ll &bitmask, int pos) { + bitmask &= ~(1 << pos); +} + +// Unset all bits +void unset_all(ll &bitmask) { + bitmask = 0; +} + +// Get value of bit in position pos +int get(ll bitmask, int pos) { + return bitmask & (1 << pos); +} + +// Toggle value in position pos +void toggle(ll &bitmask, int pos) { + bitmask ^= (1 << pos); +} + +// Get position of least significant 1 +int least_significant_one(ll bitmask) { + return bitmask & (-bitmask); +}