fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int maximum(vector<int> &v,int k){
  4. int sum=0;
  5. unordered_map<int,int>m;
  6. int ans=0;
  7. for(int i=0;i<v.size();i++){
  8. sum+=v[i];
  9. if(m.find(sum-k)!=m.end()){
  10. ans=max(ans,i-m[sum-k]);
  11. }
  12. if(sum==k){
  13. ans=max(ans,i+1);
  14. }
  15. if(m.find(sum)==m.end()){
  16. m[sum]=i;
  17. }
  18. }
  19. return ans;
  20. }
  21. int minimum(vector<int> &v,int k){
  22. int sum=0;
  23. unordered_map<int,int>m;
  24. int ans=INT_MAX;
  25. for(int i=0;i<v.size();i++){
  26. sum+=v[i];
  27. if(m.find(sum-k)!=m.end()){
  28. ans=min(ans,i-m[sum-k]);
  29. }
  30. if(sum==k){
  31. ans=min(ans,i+1);
  32. }
  33.  
  34. m[sum]=i;
  35.  
  36. }
  37. return ans;
  38. }
  39. int main(){
  40. int n;cin>>n;
  41. int k;cin>>k;
  42. vector<int>v(n);
  43. for(int i=0;i<n;i++)cin>>v[i];
  44. cout<<"Min Size:"<<minimum(v,k)<<" Max Size:"<<maximum(v,k)<<endl;
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0.01s 5312KB
stdin
6
15
10 5 2 7 1 -10
stdout
Min Size:2  Max Size:6