fork download
  1. #include <iostream>
  2. #include<vector>
  3. #include<map>
  4. #include<climits>
  5. using namespace std;
  6.  
  7. int main() {
  8. int n,k,max_len=INT_MIN,min_len=INT_MAX;
  9. cin>>n>>k;
  10. vector<int>arr(n+1);
  11. vector<int>prefix(n+1,0);
  12. map<int,int>m;
  13. for(int i=1;i<=n;i++){
  14. cin>>arr[i];
  15. prefix[i]=arr[i]+prefix[i-1];
  16. }
  17. m[0] = 0;
  18. for(int i=1;i<=n;i++){
  19. if(m.find(prefix[i]-k)!=m.end()){
  20. int subArrayLength=i-m[prefix[i]-k];
  21. max_len=max(max_len,subArrayLength);
  22. min_len=min(min_len,subArrayLength);
  23. }
  24. if (m.find(prefix[i]) == m.end()) {
  25. m[prefix[i]] = i;
  26. }
  27. }
  28.  
  29. if(max_len==INT_MIN){
  30. cout<<-1;
  31. }
  32. else{
  33. cout<<max_len<<" "<<min_len;
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0.01s 5292KB
stdin
6 0
-1 -1 2 1 -2 3
stdout
4 3