fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. // your code goes here
  13. Scanner sc=new Scanner(System.in);
  14. int n=sc.nextInt();
  15. int b[]=new int[n+1];
  16.  
  17. int k=sc.nextInt();
  18.  
  19.  
  20. for(int i=1;i<=n;i++)
  21. b[i]=sc.nextInt();
  22.  
  23. int median =b[k];
  24.  
  25. for(int i=1;i<=n;i++)
  26. {
  27. if(b[i]<median)
  28. b[i]=-1;
  29. else if(b[i]==median)
  30. b[i]=0;
  31. else
  32. b[i]=1;
  33. }
  34.  
  35.  
  36. int prefix[]=new int[n+1];
  37. for(int i=1;i<=n;i++)
  38. prefix[i]=prefix[i-1]+b[i];
  39.  
  40. Map<Integer,Integer> freqeven=new HashMap<>();
  41. Map<Integer,Integer> freqodd=new HashMap<>();
  42. int count=0;
  43. freqeven.put(0,1);
  44.  
  45.  
  46. for(int i=1;i<=n;i++)
  47. {
  48.  
  49. /* if i is odd then we need to check in even map because if we want (j-i to be odd) if
  50. i is odd then if we do odd(i) - even(j) then we will get(j-i) as odd length, so j must be even
  51. hence we are checking in even map*/
  52.  
  53. if(i%2!=0)
  54. {
  55. count+=freqeven.getOrDefault(prefix[i],0);
  56. freqodd.put(prefix[i],freqodd.getOrDefault(prefix[i],0)+1);
  57.  
  58. }
  59. else
  60. {
  61. count+=freqodd.getOrDefault(prefix[i],0);
  62. freqeven.put(prefix[i],freqeven.getOrDefault(prefix[i],0)+1);
  63. }
  64. }
  65.  
  66. System.out.println(count);
  67.  
  68.  
  69.  
  70.  
  71. }
  72. }
Success #stdin #stdout 0.14s 54548KB
stdin
6 4
5 3 1 4 7 7 
stdout
4