// A simple C++ Program to count all subarrays having
// XOR of elements as given value m
#include <bits/stdc++.h>
using namespace std;
// Simple function that returns count of subarrays
// of arr with XOR value equals to m
long long subarrayXor(int arr[], int n, int l,int r)
{
long long ans = 0; // Initialize ans
// Pick starting point i of subarrays
for (int i = l-1; i < r; i++) {
int xorSum = 0; // Store XOR of current subarray
// Pick ending point j of subarray for each i
for (int j = i; j < r; j++) {
// calculate xorSum
xorSum = xorSum ^ arr[j];
// If xorSum is equal to given value,
// increase ans by 1.
if (xorSum + 1 ==xorSum^1 )
ans++;
}
}
return ans;
}
// Driver program to test above function
int main()
{
int arr[] = { 1, 2, 9, 8, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
int m = 6;
int l=1;
int r=5;
cout << "Number of subarrays having given XOR is "
<< subarrayXor(arr, n, l,r);
return 0;
}
Ly8gQSBzaW1wbGUgQysrIFByb2dyYW0gdG8gY291bnQgYWxsIHN1YmFycmF5cyBoYXZpbmcKLy8gWE9SIG9mIGVsZW1lbnRzIGFzIGdpdmVuIHZhbHVlIG0KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBTaW1wbGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGNvdW50IG9mIHN1YmFycmF5cwovLyBvZiBhcnIgd2l0aCBYT1IgdmFsdWUgZXF1YWxzIHRvIG0KbG9uZyBsb25nIHN1YmFycmF5WG9yKGludCBhcnJbXSwgaW50IG4sIGludCBsLGludCByKQp7Cglsb25nIGxvbmcgYW5zID0gMDsgLy8gSW5pdGlhbGl6ZSBhbnMKCgkvLyBQaWNrIHN0YXJ0aW5nIHBvaW50IGkgb2Ygc3ViYXJyYXlzCglmb3IgKGludCBpID0gbC0xOyBpIDwgcjsgaSsrKSB7CgkJaW50IHhvclN1bSA9IDA7IC8vIFN0b3JlIFhPUiBvZiBjdXJyZW50IHN1YmFycmF5CgoJCS8vIFBpY2sgZW5kaW5nIHBvaW50IGogb2Ygc3ViYXJyYXkgZm9yIGVhY2ggaQoJCWZvciAoaW50IGogPSBpOyBqIDwgcjsgaisrKSB7CgkJCS8vIGNhbGN1bGF0ZSB4b3JTdW0KCQkJeG9yU3VtID0geG9yU3VtIF4gYXJyW2pdOwoKCQkJLy8gSWYgeG9yU3VtIGlzIGVxdWFsIHRvIGdpdmVuIHZhbHVlLAoJCQkvLyBpbmNyZWFzZSBhbnMgYnkgMS4KCQkJaWYgKHhvclN1bSArIDEgPT14b3JTdW1eMSApCgkJCQlhbnMrKzsKCQl9Cgl9CglyZXR1cm4gYW5zOwp9CgovLyBEcml2ZXIgcHJvZ3JhbSB0byB0ZXN0IGFib3ZlIGZ1bmN0aW9uCmludCBtYWluKCkKewoJaW50IGFycltdID0geyAxLCAyLCA5LCA4LCA3IH07CglpbnQgbiA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7CglpbnQgbSA9IDY7CgkKCWludCBsPTE7CglpbnQgcj01OwoKCWNvdXQgPDwgIk51bWJlciBvZiBzdWJhcnJheXMgaGF2aW5nIGdpdmVuIFhPUiBpcyAiCgkJPDwgc3ViYXJyYXlYb3IoYXJyLCBuLCBsLHIpOwoJcmV0dXJuIDA7Cn0K