class Solution {public: vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) { int n = nums.size(); vector<int> a{0}; nums[0] &= 1; for (int i = 1; i < n; i++) { nums[i] &= 1; a.push_back(a.back()+(nums[i-1] == nums[i])); } vector<bool> ans; for (auto &q : queries) { ans.push_back(a[q[0]] == a[q[1]]); // if between q[0] and q[1], there is a adjacent elements with same parity, prefix sum will change } return ans; }};
using ll = long long;class Solution {public: int minSubarray(vector<int>& nums, int p) { int n = nums.size(); int r = accumulate(nums.begin(),nums.end(),0ll)%p; if (r == 0) return 0; unordered_map<int,int> m; m[0] = -1; int ans = n; for (int i = 0, s = 0; i < n; i++) { s += nums[i]; s %= p; int t = s - r; if (t < 0) t += p; if (m.find(t) != m.end()) ans = min(ans, i-m[t]); m[s] = i; } return ans == n ? -1 : ans; }};