fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int n,k;
  6. cin>>n>>k;
  7.  
  8. vector<int> numbers(n);
  9.  
  10. for(auto& number: numbers){
  11. cin>>number;
  12. }
  13.  
  14. int smallest = INT_MAX, largest = INT_MIN;
  15.  
  16. unordered_map<int,int> firstOccr, lastOccr;
  17.  
  18. firstOccr[0] = -1;
  19. lastOccr[0] = -1;
  20.  
  21. int currSum = 0;
  22.  
  23. for(int i=0; i<n; i++){
  24. currSum += numbers[i];
  25.  
  26. if(firstOccr.find(currSum - k) != firstOccr.end()){
  27. int minLen = i - lastOccr[currSum - k];
  28. int maxLen = i - firstOccr[currSum - k];
  29.  
  30. if(maxLen > largest)largest = maxLen;
  31. if(minLen < smallest)smallest = minLen;
  32.  
  33. }
  34.  
  35. if(firstOccr.find(currSum) == firstOccr.end())firstOccr[currSum] = i;
  36.  
  37. lastOccr[currSum] = i;
  38.  
  39. }
  40.  
  41. cout<<largest<<" "<<smallest;
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0.01s 5284KB
stdin
5 4
3 1 3 -2 2
stdout
4 2