fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int n,k; cin>>n>>k;
  5. int a[n];
  6. for(int i=0;i<n;i++) cin>>a[i];
  7.  
  8. unordered_map<int,int> mp1,mp2;
  9. mp1[0]=-1;
  10. mp2[0]=-1;
  11.  
  12. int x=0,lmin=INT_MAX,lmax=0;
  13. int cmin=0,cmax=0;
  14.  
  15. for(int j=0;j<n;j++){
  16. x+=a[j];
  17.  
  18. if(mp1.find(x-k)!=mp1.end()){
  19. int i=mp1[x-k]+1;
  20. int len=j-i+1;
  21.  
  22. if(len<lmin){
  23. lmin=len;
  24. cmin=1;
  25. }
  26. else if(len==lmin)
  27. cmin++;
  28. }
  29.  
  30. mp1[x]=j;
  31.  
  32. if(mp2.find(x-k)!=mp2.end()){
  33. int i=mp2[x-k]+1;
  34. int len=j-i+1;
  35.  
  36. if(len>lmax){
  37. lmax=len;
  38. cmax=1;
  39. }
  40. else if(len==lmax)
  41. cmax++;
  42. }
  43.  
  44. if(mp2.find(x)==mp2.end())
  45. mp2[x]=j;
  46. }
  47.  
  48. if(lmax==0)
  49. cout<<-1<<" "<<-1;
  50. else
  51. cout<<cmax<<" "<<cmin;
  52. }
Success #stdin #stdout 0s 5304KB
stdin
5 5
1 2 3 2 5
stdout
2 1