fork download
  1. import java.util.*;
  2.  
  3. class Ideone {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. int k = sc.nextInt();
  8. int arr[] = new int[n];
  9. for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
  10.  
  11. HashMap<Integer,Integer> first = new HashMap<>();
  12. HashMap<Integer,Integer> last = new HashMap<>();
  13. int sum = 0, maxLen = 0, minLen = Integer.MAX_VALUE;
  14. int maxCount = 0, minCount = 0;
  15.  
  16. first.put(0,-1);
  17. last.put(0,-1);
  18.  
  19. for (int i = 0; i < n; i++) {
  20. sum += arr[i];
  21.  
  22. if (first.containsKey(sum - k)) {
  23. int len = i - first.get(sum - k);
  24. if (len > maxLen) {
  25. maxLen = len;
  26. maxCount = 1;
  27. } else if (len == maxLen) {
  28. maxCount++;
  29. }
  30. }
  31.  
  32. if (last.containsKey(sum - k)) {
  33. int len = i - last.get(sum - k);
  34. if (len < minLen) {
  35. minLen = len;
  36. minCount = 1;
  37. } else if (len == minLen) {
  38. minCount++;
  39. }
  40. }
  41.  
  42. if (!first.containsKey(sum)) first.put(sum,i);
  43. last.put(sum,i);
  44. }
  45.  
  46. if (minLen == Integer.MAX_VALUE) minLen = 0;
  47. System.out.println(maxLen + " " + maxCount);
  48. System.out.println(minLen + " " + minCount);
  49. }
  50. }
Success #stdin #stdout 0.15s 58912KB
stdin
4
4
2
2
0
5
stdout
3 1
2 1