Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    This massive 49-inch ultrawide OLED monitor is just $900

    Newegg’s $7,500 RTX 5090 card is a sad, depressing omen

    Casio’s new G-Shock Mudmaster GGB100X watches with quad sensors and Bluetooth officially arrive in the US

    Facebook X (Twitter) Instagram
    • Artificial Intelligence
    • Business Technology
    • Cryptocurrency
    • Gadgets
    • Gaming
    • Health
    • Software and Apps
    • Technology
    Facebook X (Twitter) Instagram Pinterest Vimeo
    Tech AI Verse
    • Home
    • Artificial Intelligence

      What the polls say about how Americans are using AI

      February 27, 2026

      Tensions between the Pentagon and AI giant Anthropic reach a boiling point

      February 21, 2026

      Read the extended transcript: President Donald Trump interviewed by ‘NBC Nightly News’ anchor Tom Llamas

      February 6, 2026

      Stocks and bitcoin sink as investors dump software company shares

      February 4, 2026

      AI, crypto and Trump super PACs stash millions to spend on the midterms

      February 2, 2026
    • Business

      Google releases Gemini 3.1 Flash Lite at 1/8th the cost of Pro

      March 4, 2026

      Huawei Watch GT Series

      March 4, 2026

      Weighing up the enterprise risks of neocloud providers

      March 3, 2026

      A stolen Gemini API key turned a $180 bill into $82,000 in two days

      March 3, 2026

      These ultra-budget laptops “include” 1.2TB storage, but most of it is OneDrive trial space

      March 1, 2026
    • Crypto

      Banks Respond to Kraken’s Federal Reserve Access as Trump Sides with Crypto

      March 4, 2026

      Hyperliquid and DEXs Break the Top 10 — Is the CEX Era Ending?

      March 4, 2026

      Consensus Hong Kong 2026: The Institutional Turn 

      March 4, 2026

      New Crypto Mutuum Finance (MUTM) Reports V1 Protocol Progress as Roadmap Enters Phase 3

      March 4, 2026

      Bitcoin Short Sellers Caught Off Guard in New White House Move

      March 4, 2026
    • Technology

      Newegg’s $7,500 RTX 5090 card is a sad, depressing omen

      March 6, 2026

      Casio’s new G-Shock Mudmaster GGB100X watches with quad sensors and Bluetooth officially arrive in the US

      March 6, 2026

      As brands respond to AI search, walls crumble between paid and organic

      March 6, 2026

      Why a Gen Alpha–focused skin-care brand is giving equity to teen creators

      March 6, 2026

      ‘Nobody’s asking the question’: WPP’s biggest restructure in years means nothing until CMOs say it does

      March 6, 2026
    • Others
      • Gadgets
      • Gaming
      • Health
      • Software and Apps
    Check BMI
    Tech AI Verse
    You are at:Home»Technology»A Beautiful Technique for Some XOR Related Problems
    Technology

    A Beautiful Technique for Some XOR Related Problems

    TechAiVerseBy TechAiVerseJune 1, 2025No Comments9 Mins Read4 Views
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr Email Reddit
    A Beautiful Technique for Some XOR Related Problems
    Share
    Facebook Twitter LinkedIn Pinterest WhatsApp Email

    A Beautiful Technique for Some XOR Related Problems

    Inspiration

    I’m very excited about this blog, as it took me quite a lot of effort and scavenging through the internet to completely grasp the concept of this technique(That’s probably because I have almost zero knowledge in Linear Algebra or I’m just plain dumb). So I feel like I genuinely conquered a challenge, and I really want to share it with someone. But there’s no way my CP friends circle will believe it, they’ll think I’m just trying to show off 😛

    So here I am, sharing it on CF. I also created a personal blog, so that if I ever feel like sharing something again(not only about CP), I can write a blog there. I also added this same post there, you can read it there if you prefer dark theme. I’ll be pleased to hear any thoughts on the blog or if I can improve it in some way ^_^

    Introduction

    Since it concerns Linear Algebra, there needs to be a lot of formal stuff going on in the background. But, I’m too much inconfident on this subject to dare go much deep. So, whenever possible, I’ll try to explain everything in intuitive and plain English words. Also, this blog might take a while to be read through completely, as there are quite a few observations to grasp, and the example problems aren’t that easy either. So please be patient and try to go through it all, in several sits if needed. I believe it’ll be worth the time. In any case, I’ve written the solutions, codes, and provided links to their editorials(if available). I’ll provide more details in the solutions tomorrow and put more comments in the codes, since I’m really tired from writing this blog all day.

    Now, the problems that can be solved using this technique are actually not much hard to identify. The most common scenario involves: you’ll be given an array of numbers, and then the problem asks for an answer by considering all the xor-sums of the numbers in all possible subsets of the array. This technique can also be used in some online-query problems: the problem can provide queries of first type instructing you to insert numbers in the array(_without removal_, I don’t know how to solve with deletion of elements) and in-between those queries, asking for answers in separate queries of second type.

    The whole technique can be divided into two main parts, some problems can even be solved by using only the first part(Don’t worry if you don’t understand them completely now, I explain them in details right below): 1. Represent each given number in it’s binary form and consider it as a vector in the $$$mathbb{Z}_2^d$$$ vector space, where $$$d$$$ is the maximum possible number of bits. Then, xor of some of these numbers is equivalent to addition of the corresponding vectors in the vector space. 2. Somehow, relate the answer to the queries of second type with the basis of the vectors found in Part 1.

    PS: Does anyone know any name for this technique? I’m feeling awkward referring to it as ‘technique’ this many times 😛 If it’s not named yet, how about we name it something?

    Part 1: Relating XOR with Vector Addition in $$$mathbb{Z}_2^d$$$

    Let me explain the idea in plain English first, then we’ll see what the $$$mathbb{Z}_2^d$$$ and vector space means. I’m sure most of you have already made this observation by yourselves at some point.

    Suppose, we’re xor-ing the two numbers $$$2$$$ and $$$3.$$$ Let’s do it below:

    $$$ begin{equation*}begin{array}{r} (10)_2\ underline{oplus;(11)_2}\ (01)_2 end{array}end{equation*} $$$

    Now, for each corresponding pair of bits in the two numbers, compare the result of their xor with the result of their sum taken modulo $$$2$$$:

    Bit no. First number Second number $$$oplus$$$ Sum Sum taken $$$pmod 2$$$
    $$$1$$$st bit $$$0$$$ $$$1$$$ $$$1$$$ $$$1$$$ $$$1$$$
    $$$2$$$nd bit $$$1$$$ $$$1$$$ $$$0$$$ $$$2$$$ $$$0$$$

    Notice the similarity between columns $$$4$$$ and $$$6$$$? So, we can see that taking xor between two numbers is essentially the same as, for each bit positions separately, taking the sum of the two corresponding bits in the two numbers modulo $$$2.$$$

    Now, consider a cartesian plane with integer coordinates, where the coordinate values can only be $$$0$$$ or $$$1.$$$ If any of the coordinates, exceeds $$$1,$$$ or goes below $$$0,$$$ we simply take it’s value modulo $$$2.$$$

    This way, there can only be $$$4$$$ points in this plane: $$$(0, 0), (0, 1), (1, 0), (1, 1).$$$ Writing any other pair of coordinates will refer to one of them in the end, for example, point $$$(3, 2)$$$ is the same point as point $$$(1, 0)$$$ since $$$3 equiv 1$$$ and $$$2 equiv 0$$$ modulo $$$2.$$$

    In view of this plane, we can represent the number $$$2 = (10)_2$$$ as the point $$$(0, 1),$$$ by setting the first bit of $$$2$$$ as the $$$x$$$ coordinate and the second bit as the $$$y$$$ coordinate in our plane. Refer to this point as $$$P(0, 1).$$$ Then, the position vector of $$$2$$$ will be $$$overrightarrow{OP}$$$ where $$$O(0, 0)$$$ is the origin. Similarly, the position vector of $$$3$$$ will be $$$overrightarrow{OQ}$$$ where $$$Q = (1, 1).$$$

    An interesting thing happens here, if we add the two position vectors, the corresponding coordinates get added modulo $$$2,$$$ which actually gives us the position vector of the xor of these two position vectors. For example, adding vectors $$$overrightarrow{OP}$$$ and $$$overrightarrow{OQ}$$$ we get $$$overrightarrow{OR}$$$ where $$$R(1, 0)$$$ turns out to be the point corresponding the xor of $$$2$$$ and $$$3.$$$

    This is all there is to it. Transforming xor operations to bitwise addition modulo $$$2$$$ and, in some cases, vector addition in this way can be helpful in some problems. Let’s see one such problem. Before that, let me explain in short what vector space and $$$mathbb{Z}_2^b$$$ meant earlier. I apologize to any Linear Algebra fans, since I don’t want to write formal definitions here to make things look harder than it is. I’ll explain the idea of these terms the way I find them in my mind, kindly pardon me for any mistakes and correct me if I’m wrong.

    $$$underline{text{Vector Space}}$$$: Just a collection of vectors.

    $$$underline{mathbb{Z_2}}$$$: $$$mathbb{Z_m}$$$ is the set of remainders upon division by $$$m.$$$ So, $$$mathbb{Z_2}$$$ is simply the set $$${0, 1},$$$ since these are the only remainders possible when taken modulo $$$2.$$$

    $$$underline{mathbb{Z_2^d}}$$$: A $$$d-$$$dimensional vector space consisting of all the different position vectors that consists of $$$d$$$ coordinates, all coordinates being elements of $$$mathbb{Z_2}.$$$ For example, earlier our custom cartesian plane was a two-dimensional one. So, it was $$$mathbb{Z_2^2}.$$$ $$$mathbb{Z_2^3}$$$ would be a small $$$3d-$$$plane with only $$$2^3 = 8$$$ points, all coordinates taken modulo $$$2.$$$

    So, what we’ve seen is that the xor-operation is equivalent to vector addition in a $$$mathbb{Z}_2^d$$$ vector space. See how unnecessarily intimidating this simple idea sounds when written in formal math!

    Anyways, the problem:

    Problem 1 (Division 2 — C)


    Find the number of non-empty subsets, modulo $$$10^9 + 7,$$$ of a given set of size $$$1 le n le 10^5$$$ with range of elements $$$1 le a_i le 70,$$$ such that the product of it’s elements is a square number.
    Link to the source

    If you’d like to solve the problem first, then kindly pause and try it before reading on further.


    Since the number of different possible masks were just $$$70$$$ in the previous problem, we had been able to use dynamic programming for checking all possible xors. But what if the constraint was much bigger, say $$$10^5.$$$ That is when we can use Part $$$2$$$ of this technique, which, in some cases, works even when the queries are online.

    Part 2: Bringing in Vector Basis

    We need a couple of definitions now to move forward. All the vectors mentioned in what follows, exclude null vectors. I sincerely apologize for being so informal with these definitions.

    $$$underline{text{Independent Vectors:}}$$$ A set of vectors $$$vec{v_1}, vec{v_2}, ldots, vec{v_n}$$$ is called independent, if none of them can be written as the sum of a linear combination of the rest.

    $$$underline{text{Basis of a Vector Space:}}$$$ A set of vectors is called a basis of a vector space, if all of the element vectors of that space can be written uniquely as the sum of a linear combination of elements of that basis.

    A few important properties of independent vectors and vector basis that we will need later on(I find these pretty intuitive, so I didn’t bother with reading any formal proofs. Let me know in the comments if you need any help):

    1. For a set of independent vectors, we can change any of these vectors by adding to it any linear combination of all of them, and the vectors will still stay independent. What’s more fascinating is that, the set of vectors in the space representable by some linear combination of this independent set stays exactly the same after the change.

    2. Notice that, in case of $$$mathbb{Z}_2^d$$$ vector space, the coefficients in the linear combination of vectors must also lie in $$$mathbb{Z}_2.$$$ Which means that, an element vector can either stay or not stay in a linear combination, there’s no in-between.

    3. The basis is actually the smallest sized set such that all other vectors in the vector space are representable by a linear combination of just the element vectors of that set.

    4. The basis vectors are independent.

    5. For any set with smaller number of independent vectors than the basis, not all of the vectors in the space will be representable.

    6. And there cannot possibly be larger number of independent vectors than basis in a set. If $$$d$$$ is the size of the basis of a vector space, then the moment you have $$$d$$$ independent vectors in a set, it becomes a basis. You cannot add another vector into it, since that new vector is actually representable using the basis.

    7. For a $$$d-$$$dimensional vector space, it’s basis can have at most $$$d$$$ vector elements.

    With just these few properties, we can experience some awesome solutions to a few hard problems. But first, we need to see how we can efficiently find the basis of a vector space of $$$n$$$ vectors, where each vector is an element of $$$mathbb{Z}_2^d.$$$ The algorithm is quite awesome <3 And it works in $$$O(n cdot d).$$$

    The Algorithm:


    This algorithm extensively uses properties $$$1, 2, 3$$$ and $$$4,$$$ and also the rest in the background. All the vectors here belong to $$$mathbb{Z}_2^d,$$$ so they are representable by a bitmask of length $$$d.$$$
    Suppose at each step, we’re taking an input vector $$$vec{v_i}$$$ and we already have a basis of the previously taken vectors $$$vec{v_1}, vec{v_2}, ldots, vec{v_{i – 1}},$$$ and now we need to update the basis such that it can also represent the new vector $$$vec{v_i}.$$$
    In order to do that, we first need to check whether $$$vec{v_i}$$$ is representable using our current basis or not.
    If it is, then this basis is still enough and we don’t need to do anything. But if it’s not, then we just add this vector $$$vec{v_i}$$$ to the set of basis.
    So the only difficuly that remains is, to efficiently check whether the new vector is representable by the basis or not. In order to facilitate this purpose, we use property $$$1$$$ to slightly modify any new vectors before inserting it in the basis, being careful not to break down the basis. This way, we can have more control over the form of our basis vectors. So here’s the plan:
    Let, $$$f(vec{v})$$$ be the first position in the vector’s binary representation, where the bit is set. We make sure that all the basis vectors each have a different $$$f$$$ value.
    Here’s how we do it. Initially, there are no vectors in the basis, so we’re fine, there are no $$$f$$$ values to collide with each other. Now, suppose we’re at the $$$i$$$’th step, and we’re checking if vector $$$vec{v_i}$$$ is representable by the basis or not. Since, all of our basis have a different $$$f$$$ value, take the one with the least $$$f$$$ value among them, let’s call this basis vector $$$vec{b_1}.$$$
    If $$$f(vec{v_i}) < f(vec{b_1})$$$ then no matter how we take the linear combination, by property $$$2,$$$ no linear combination of the basis vectors' can have $$$1$$$ at position $$$f(vec{v_i}).$$$ So, $$$vec{v_i}$$$ will be a new basis vector, and since it's $$$f$$$ value is already different from the rest of the basis vectors, we can insert it into the set as it is and keep a record of it's $$$f$$$ value.
    But, if $$$f(vec{v_i}) == f(vec{b_1}),$$$ then we must subtract $$$vec{b_1}$$$ from $$$vec{v_i}$$$ if we want to represent $$$vec{v_i}$$$ as a linear combination of the basis vectors, since no other basis vector has bit $$$1$$$ at position $$$f(vec{v_i}) = f(vec{b_1}).$$$ So, we subtract $$$vec{b_1}$$$ from $$$vec{v_i}$$$ and move on to $$$vec{b_2}.$$$
    Note that, by changing the value of $$$vec{v_i}$$$ we’re not causing any problem according to property $$$1.$$$ $$$vec{v_i}$$$ and $$$vec{v_i} – vec{b_1}$$$ is of same use to us. If in some later step we find out $$$vec{v_i}$$$ is actually not representable by the current basis, we can still just insert it’s changed value in the basis, since the set of vectors in the space representable by this new basis would’ve been the same if we inserted the original $$$vec{v_i}$$$ instead.
    If, after iterating through all the basis vector $$$vec{b}$$$’s and subtracting them from $$$vec{v_i}$$$ if needed, we still find out that $$$vec{v_i}$$$ is not null vector, it means that the new changed $$$vec{v_i}$$$ has a larger value of $$$f$$$ than all other basis vectors. So we have to insert it into the basis and keep a record of it’s $$$f$$$ value.

    Here’s the implementation, the vectors being represented by bitmasks of length $$$d$$$:

    int basis[d]; // basis[i] keeps the mask of the vector whose f value is i
    
    int sz; // Current size of the basis
    
    void insertVector(int mask) {
    	for (int i = 0; i < d; i++) {
    		if ((mask & 1 << i) == 0) continue; // continue if i != f(mask)
    
    		if (!basis[i]) { // If there is no basis vector with the i'th bit set, then insert this vector into the basis
    			basis[i] = mask;
    			++sz;
    			
    			return;
    		}
    
    		mask ^= basis[i]; // Otherwise subtract the basis vector from this vector
    	}
    }
    

    Let's view some problems now:

    Problem 2a


    Given a set $$$S$$$ of size $$$1 le n le 10^5$$$ with elements $$$0 le a_i lt 2^{20}.$$$ Find the number of distinct integers that can be represented using xor over the set of the given elements.
    Link to the source


    Problem 2b


    We have a graph of $$$2^{k}$$$ nodes numbered from $$$0$$$ to $$$2^{k} - 1,$$$ $$$1 le k le 30.$$$ Also, we're given $$$1 le M le 10^5$$$ integers $$$x_1, x_2, ldots, x_M$$$ within the range $$$0 le x_i le 2^{k} - 1.$$$ In the graph, two vertices $$$u$$$ and $$$v$$$ are connected with an edge iff $$$u oplus v = x_i$$$ for some $$$i.$$$ Find the number of connected components in the graph.
    Link to the source
    Link to the editorial and reference code


    Problem 3


    Given a set $$$S$$$ of size $$$1 le n le 10^5$$$ with elements $$$0 le a_i lt 2^{20}.$$$ What is the maximum possible xor of the elements of some subset of $$$S?$$$
    Link to the source


    Problem 4 (1st Hunger Games — S)


    We have an empty set $$$S$$$ and we are to do $$$1 le n le 10^6$$$ queries on it. Let, $$$X$$$ denote the set of all possible xor-sums of elements from a subset of $$$S.$$$ There are two types of queries.
    Type $$$1$$$: Insert an element $$$1 le k le 10^9$$$ to the set(If it's already in the set, do nothing)
    Type $$$2$$$: Given $$$k,$$$ print the $$$k$$$'th hightest number from $$$X.$$$ It's guaranteed that $$$k le mid X mid.$$$ Link to the source


    Problem 5 (Division 2 — F)


    You're given an array $$$0 le a_i lt 2^{20}$$$ of length $$$1 le n le 10^5.$$$ You have to answer $$$1 le q le 10^5$$$ queries.
    In each query you'll be given two integers $$$1 le l le n$$$ and $$$0 le x lt 2^{20}.$$$ Find the number of subsequences of the first $$$l$$$ elements of this array, modulo $$$10^9 + 7,$$$ such that their bitwise-xor sum is $$$x.$$$
    Link to the source


    Problem 6 (Education Round — G)


    You are given an array $$$0 le a_i le 10^9$$$ of $$$1 le n le 2 cdot 10^5$$$ integers. You have to find the maximum number of segments this array can be partitioned into, such that -
    1. Each element is contained in exactly one segment
    2. Each segment contains at least one element
    3. There doesn't exist a non-empty subset of segments such that bitwise-xor of the numbers from them is equal to $$$0$$$
    Print $$$-1$$$ if no suitable partition exists.
    Link to the source


    Conclusion

    This is my first take on writing tutorial blogs on CF. I hope it'll be of use to the community.

    I apologize for my terrible Linear Algebra knowledge. I would write this blog without using any of it if I could. I don't want to spread any misinformation. So please let me know in comments if you find any mistakes/wrong usage of notations.

    I plan to write on Hungarian Algorithm next. There's just so many prerequisites to this algorithm. It'll be an enjoyable challenge to write about. I'd be glad if you can provide me some resource links in the comments to learn it from, though I already have quite a few.

    References:

    1. 2 Special cases of Gaussian [Tutorial] by AJ_Coder

    2. General ideas by adamant

    3. Helpful comments for Problem 6 by mohamedeltair

    4. Solution idea using this trick to Problem 5 by loomas

    Share. Facebook Twitter Pinterest LinkedIn Reddit WhatsApp Telegram Email
    Previous ArticleHow Much Will the iPhone 17 Cost? Tariff Math Pushes It Over $4,000
    Next Article Browser extension (Firefox, Chrome, Opera, Edge) to redirect URLs based on regex
    TechAiVerse
    • Website

    Jonathan is a tech enthusiast and the mind behind Tech AI Verse. With a passion for artificial intelligence, consumer tech, and emerging innovations, he deliver clear, insightful content to keep readers informed. From cutting-edge gadgets to AI advancements and cryptocurrency trends, Jonathan breaks down complex topics to make technology accessible to all.

    Related Posts

    Newegg’s $7,500 RTX 5090 card is a sad, depressing omen

    March 6, 2026

    Casio’s new G-Shock Mudmaster GGB100X watches with quad sensors and Bluetooth officially arrive in the US

    March 6, 2026

    As brands respond to AI search, walls crumble between paid and organic

    March 6, 2026
    Leave A Reply Cancel Reply

    Top Posts

    Ping, You’ve Got Whale: AI detection system alerts ships of whales in their path

    April 22, 2025705 Views

    Lumo vs. Duck AI: Which AI is Better for Your Privacy?

    July 31, 2025291 Views

    6.7 Cummins Lifter Failure: What Years Are Affected (And Possible Fixes)

    April 14, 2025165 Views

    6 Best MagSafe Phone Grips (2025), Tested and Reviewed

    April 6, 2025125 Views
    Don't Miss
    Uncategorized March 7, 2026

    This massive 49-inch ultrawide OLED monitor is just $900

    This massive 49-inch ultrawide OLED monitor is just $900 Image: MSI I like ’em big.…

    Newegg’s $7,500 RTX 5090 card is a sad, depressing omen

    Casio’s new G-Shock Mudmaster GGB100X watches with quad sensors and Bluetooth officially arrive in the US

    As brands respond to AI search, walls crumble between paid and organic

    Stay In Touch
    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • Vimeo

    Subscribe to Updates

    Get the latest creative news from SmartMag about art & design.

    About Us
    About Us

    Welcome to Tech AI Verse, your go-to destination for everything technology! We bring you the latest news, trends, and insights from the ever-evolving world of tech. Our coverage spans across global technology industry updates, artificial intelligence advancements, machine learning ethics, and automation innovations. Stay connected with us as we explore the limitless possibilities of technology!

    Facebook X (Twitter) Pinterest YouTube WhatsApp
    Our Picks

    This massive 49-inch ultrawide OLED monitor is just $900

    March 7, 20262 Views

    Newegg’s $7,500 RTX 5090 card is a sad, depressing omen

    March 6, 20262 Views

    Casio’s new G-Shock Mudmaster GGB100X watches with quad sensors and Bluetooth officially arrive in the US

    March 6, 20262 Views
    Most Popular

    7 Best Kids Bikes (2025): Mountain, Balance, Pedal, Coaster

    March 13, 20250 Views

    VTOMAN FlashSpeed 1500: Plenty Of Power For All Your Gear

    March 13, 20250 Views

    Best TV Antenna of 2025

    March 13, 20250 Views
    © 2026 TechAiVerse. Designed by Divya Tech.
    • Home
    • About Us
    • Contact Us
    • Privacy Policy
    • Terms & Conditions

    Type above and press Enter to search. Press Esc to cancel.