classSolution {
public:longlong maximumSubarraySum(vector<int>& nums, int k) {
int n = nums.size();
unordered_map<int, int> cnt;
longlong sum =0;
int valid =0;
for (int i =0; i < k; i++) {
sum += nums[i];
if (cnt[nums[i]]++==0) valid++;
}
longlong res = valid == k ? sum : 0;
for (int i = k; i < n; i++) {
sum += (nums[i] - nums[i-k]);
if (cnt[nums[i]]++==0) valid++;
if (--cnt[nums[i-k]] ==0) valid--;
if (valid == k) res = max(res, sum);
}
return res;
}
};