fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int n1,k;
  6. cin>>n1>>k;
  7. int A[n1];
  8. for(int i = 0 ; i<n1 ; i++){
  9. cin>>A[i];
  10. }
  11. int presum[n1+1];
  12. for(int i = 0 ; i<n1+1 ; i++){
  13. presum[i] = 0;
  14. }
  15. map<int,int>map1,map2;
  16. for(int i = 1 ; i<=n1 ; i++){
  17. presum[i] = presum[i-1]+A[i-1];
  18. }
  19. for(int i = 0 ; i<=n1 ; i++){
  20. if(map1.find(presum[i])==map1.end()){
  21. map1[presum[i]] = i;
  22. }
  23. map2[presum[i]] = i;
  24. }
  25. int maxi = 0,mini=INT_MAX;
  26. for(int i = 1 ; i<=n1 ; i++){
  27. if(map1.find(presum[i]-k)!=map1.end()){
  28. maxi = max(maxi,abs(i-map1[presum[i]-k]));
  29. }
  30. if(map2.find(presum[i]-k)!=map2.end()){
  31. mini = min(mini,abs(i-map2[presum[i]-k]));
  32. }
  33. }
  34. int cnt1 = 0,cnt2=0;
  35. for(int i = 1 ; i<=n1 ; i++){
  36. if(map1.find(presum[i]-k)!=map1.end()){
  37. if(maxi==(i-map1[presum[i]-k])){
  38. cnt1++;
  39. }
  40. }
  41. if(map2.find(presum[i]-k)!=map2.end()){
  42. if(mini==(i-map2[presum[i]-k])){
  43. cnt2++;
  44. }
  45. }
  46. }
  47. cout<<cnt2<<" "<<cnt1<<endl;
  48. return 0;
  49. }
Success #stdin #stdout 0.01s 5320KB
stdin
3
6 15
10 5 2 7 1 -10
6 -5
-5 8 -14 2 4 12
5 4
3 1 3 -2 2
stdout
0 0