fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int arr[]= {10,5,2,7,1,9};
  6. int n=sizeof(arr)/sizeof(arr[0]);
  7. int k=15;
  8. int maxLength=0;
  9. vector<int> prefixXor(n);
  10. prefixXor[0]=arr[0];
  11. for(int i=1;i<n;i++)
  12. prefixXor[i]=prefixXor[i-1]^arr[i];
  13. unordered_map<int, int> mp;
  14. mp[0]=-1;
  15. for(int j=0;j<n;j++){
  16. int toFind=prefixXor[j]^k;
  17. if(mp.find(prefixXor[j])!=mp.end()){
  18. int i=mp[toFind]+1; //note that the actual subarray with xor k is from i+1 to j
  19. //bcoz we look for P(i-1) s.t P(i-1)^XOR(i…j)=P(j)
  20. //so P(i-1)^k=p(j) as we have assumed XOR(i…j) = k
  21. int length=j-i+1;
  22. maxLength=max(length, maxLength);
  23. }
  24. if(mp.find(prefixXor[j])==mp.end())
  25. mp[prefixXor[j]]=j;
  26. }
  27. cout<<maxLength;
  28. return 0;
  29. }
  30.  
Success #stdin #stdout 0s 5276KB
stdin
Standard input is empty
stdout
3