fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int ll;
  4.  
  5.  
  6. int smallestSubarray(vector<int>arr,int k)
  7. {
  8. unordered_map<int,int>mp;
  9. mp[0]=-1;
  10. int prefixsum=0;
  11. int n=arr.size();
  12. int length=INT_MAX;
  13. for(int i=0;i<n;i++)
  14. {
  15. prefixsum=prefixsum+arr[i];
  16. if(mp.find(prefixsum-k)!=mp.end())
  17. {
  18. int current_len=i-mp[prefixsum-k];
  19. length=min(current_len,length);
  20. }
  21. mp[prefixsum]=i;
  22. }
  23. return length;
  24. }
  25.  
  26.  
  27. int longestSubarray(vector<int>arr,int k)
  28. {
  29. unordered_map<int,int>map;
  30. map[0]=-1;
  31. int prefixsum=0;
  32. int n=arr.size();
  33. int length=INT_MIN;
  34. for(int i=0;i<n;i++)
  35. {
  36. prefixsum=prefixsum+arr[i];
  37. if(map.find(prefixsum-k)!=map.end())
  38. {
  39. int current_len=i-map[prefixsum-k];
  40. length=max(current_len,length);
  41. }
  42. if(map.find(prefixsum)==map.end())
  43. {
  44. map[prefixsum]=i;
  45. }
  46. }
  47. return length;
  48. }
  49.  
  50.  
  51. int main() {
  52. vector<int>arr={2,6,4,4,0,1,6,1};
  53. int k;
  54. cin>>k;
  55. cout<<smallestSubarray(arr,k);
  56. cout<<endl;
  57. cout<<longestSubarray(arr,k);
  58.  
  59.  
  60.  
  61.  
  62. }
  63.  
Success #stdin #stdout 0.01s 5288KB
stdin
8
stdout
2
4