Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सबएरे के XOR क्वेरीज़


मान लीजिए हमारे पास पॉजिटिव इंटीजर्स का एक ऐरे arr है और क्वेरीज़ का एक ऐरे है जहां queries[i] = [Li, Ri], प्रत्येक क्वेरी i के लिए Li से Ri तक के एलिमेंट्स का XOR कंप्यूट करें (यानी, arr[Li] XOR arr[Li+1] xor ... xor arr[Ri])। हमें दिए गए क्वेरीज़ के परिणाम वाला ऐरे ढूंढना है। यदि इनपुट इस प्रकार है - [1,3,4,8], और क्वेरीज़ हैं [[0,1],[1,2],[0,3],[3,3]], तो परिणाम [2,7,14,8] होगा। ऐसा इसलिए क्योंकि ऐरे में एलिमेंट्स का बाइनरी प्रतिनिधित्व है - 1 = 0001, 3 = 0011, 4 = 0100 और 8 = 1000। फिर क्वेरीज़ के लिए XOR मान हैं - [0,1] = 1 xor 3 = 2, [1,2] = 3 xor 4 = 7, [0,3] = 1 xor 3 xor 4 xor 8 = 14 और [3,3] = 8

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -

  • n := arr का आकार
  • pre नामक एक ऐरे परिभाषित करें, आकार n + 1 का, फिर pre को भरें, जैसे कि pre[i] := pre[i - 1] XOR arr[i - 1]
  • ans नामक एक और ऐरे परिभाषित करें
  • i के लिए 0 से क्वेरीज़ की संख्या - 1 तक की रेंज में
    • l := queries[i, 0], r := queries[i, 1]
    • l और r को 1 से बढ़ाएं
    • pre[r] XOR pre[l - 1] को ans में डालें
  • ans लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {       int n = arr.size();       vector <int> pre(n + 1);       for(int i = 1; i <=n; i++){          pre[i] = pre[i - 1] ^ arr[i - 1];       }       vector <int> ans;       for(int i = 0; i < queries.size(); i++){          int l = queries[i][0];          int r = queries[i][1];          l++;          r++;          ans.push_back(pre[r] ^ pre[l - 1]);       }       return ans;    } }; main(){    vector<int> v = {1,3,4,8};    vector<vector<int>> v1 = {{0,1},{1,2},{0,3},{3,3}};    Solution ob;    print_vector(ob.xorQueries(v, v1)); }

इनपुट

[1,3,4,8] [[0,1],[1,2],[0,3],[3,3]]

आउटपुट

[2,7,14,8]

  1. - C++ में अधिकतम उपसरणी योग मॉड्यूलो m (Maximum subarray sum modulo m)

    इस समस्या में, हमें आकार n की एक सरणी और एक पूर्णांक m दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम उपसरणी योग मॉड्यूलो m ढूंढे। प्रोग्राम विवरण - यहां, हम उपसरणी के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान ढूंढेंगे। आइए एक उदाहरण से समझते हैं: इनपुट - सरणी = {4

  1. - C++ में सबएरे फ्लिप करके 0 की संख्या को अधिकतम करना

    समस्या कथन एक बाइनरी ऐरे दिया गया है, एक सबएरे के एक फ्लिप की अनुमति के साथ ऐरे में अधिकतम शून्य की संख्या ढूंढें। एक फ्लिप ऑपरेशन सभी 0 को 1 में और 1 को 0 में बदल देता है। यदि arr1 = {1, 1, 0, 0, 0, 0, 0} यदि हम पहले 2 1 को 0 में फ्लिप करते हैं, तो हम आकार 7 का सबएरे प्राप्त कर सकते हैं: {0, 0, 0

  1. - C++ में न्यूनतम XOR वैल्यू पेयर

    समस्या कथन पूर्णांकों का एक ऐरे दिया गया है। उस ऐरे में वह पेयर ढूंढें जिसका XOR वैल्यू न्यूनतम हो उदाहरण यदि arr[] = {10, 20, 30, 40} तो न्यूनतम वैल्यू पेयर 20 और 30 होगा क्योंकि (20 ^ 30) = 10. (10 ^ 20) = 30 (10 ^ 30) = 20 (10 ^ 40) = 34 (20 ^ 30) = 10 (20 ^ 40) = 60 (30 ^ 40) = 54 एल्गोरिदम