You are viewing a single comment's thread. Return to all comments →
import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; public class Solution { static Map<Integer, Integer> numMap = new HashMap<>(); static Map<Integer, Integer> freqMap = new HashMap<>(); static void addEle(int ele) { if(numMap.getOrDefault(ele, -1) > 0) { int freq = numMap.get(ele); freqMap.put(freq, freqMap.get(freq)-1); } int newFreq = numMap.getOrDefault(ele, 0)+1; numMap.put(ele, newFreq); freqMap.put(newFreq, freqMap.getOrDefault(newFreq, 0)+1); } static void removeEle(int ele) { if(numMap.getOrDefault(ele, -1) > 0) { int freq = numMap.get(ele); freqMap.put(freq, freqMap.get(freq)-1); int newFreq = freq-1; numMap.put(ele, newFreq); if(newFreq > 0) { freqMap.put(newFreq, freqMap.getOrDefault(newFreq, 0)+1); } } } static List<Integer> freqQuery(List<List<Integer>> queries) { List<Integer> res = new ArrayList<>(); for(List<Integer> q : queries) { switch(q.get(0)) { case 1: { addEle(q.get(1)); break; } case 2: { removeEle(q.get(1)); break; } case 3: { boolean exists = freqMap.getOrDefault(q.get(1), -1) > 0; res.add(exists ? 1 : 0); break; } } } return res; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); int q = Integer.parseInt(bufferedReader.readLine().trim()); List<List<Integer>> queries = new ArrayList<>(); IntStream.range(0, q).forEach(i -> { try { queries.add( Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" ")) .map(Integer::parseInt) .collect(toList()) ); } catch (IOException ex) { throw new RuntimeException(ex); } }); List<Integer> ans = freqQuery(queries); bufferedWriter.write( ans.stream() .map(Object::toString) .collect(joining("\n")) + "\n" ); bufferedReader.close(); bufferedWriter.close(); } }
Seems like cookies are disabled on this browser, please enable them to open this website
Frequency Queries
You are viewing a single comment's thread. Return to all comments →
JAVA Solution With Easy Variable Names to Understand