/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int[] arr={1,2,2,3};
int target = 2;
System.
out.
println(countMajoritySubarrays
(arr,target
)); }
static int countMajoritySubarrays(int[] nums, int target) {
int n = nums.length;
int[] arr = new int[n];
for(int i =0;i<n;i++){
if(nums[i] == target){
arr[i] = 1;
}
else{
arr[i] = -1;
}
}
int[] prefix = new int[n];
prefix[0] = arr[0];
for(int i=1;i<n;i++){
prefix[i] = prefix[i-1] + arr[i];
}
HashMap
<Integer,Integer
> map
= new HashMap
<>(); map.put(0,1);
int count = 0;
for(int i = 0;i< n;i++){
int curr = prefix[i];
for(Map.
Entry<Integer,Integer
> entry
: map.
entrySet()){
if(entry.getKey() < curr){
count = count + entry.getValue();
}
}
map.put(curr,map.getOrDefault(curr,0)+1);
}
return count;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCWludFtdIGFycj17MSwyLDIsM307CgkJaW50IHRhcmdldCA9IDI7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKGNvdW50TWFqb3JpdHlTdWJhcnJheXMoYXJyLHRhcmdldCkpOwoJfQoJCiAgICBzdGF0aWMgaW50IGNvdW50TWFqb3JpdHlTdWJhcnJheXMoaW50W10gbnVtcywgaW50IHRhcmdldCkgewogICAgICAgIGludCBuID0gbnVtcy5sZW5ndGg7CgogICAgICAgaW50W10gYXJyID0gbmV3IGludFtuXTsKCiAgICAgICAgZm9yKGludCBpID0wO2k8bjtpKyspewogICAgICAgICAgICBpZihudW1zW2ldID09IHRhcmdldCl7CiAgICAgICAgICAgICAgICBhcnJbaV0gPSAxOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgYXJyW2ldID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludFtdIHByZWZpeCA9IG5ldyBpbnRbbl07IAogICAgICAgICAgIAogICAgICAgICAgICBwcmVmaXhbMF0gPSBhcnJbMF07CiAgICAgICAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICAgICAgICAgcHJlZml4W2ldID0gcHJlZml4W2ktMV0gKyBhcnJbaV07CiAgICAgICAgICB9CgogICAgICAgIEhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPiBtYXA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgIG1hcC5wdXQoMCwxKTsKICAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7aTwgbjtpKyspewogICAgICAgICAgIAogICAgICAgICAgIGludCBjdXJyID0gcHJlZml4W2ldOwoKICAgICAgICAgICAgZm9yKE1hcC5FbnRyeTxJbnRlZ2VyLEludGVnZXI+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICBpZihlbnRyeS5nZXRLZXkoKSA8IGN1cnIpewogICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIGVudHJ5LmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWFwLnB1dChjdXJyLG1hcC5nZXRPckRlZmF1bHQoY3VyciwwKSsxKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9Cn0=