class RangeModule { TreeMap map; public RangeModule() { map = new TreeMap<>(); } public void addRange(int left, int right) { var l = map.floorEntry(left); var r = map.floorEntry(right); if(l!=null && l.getValue()>=left) left=l.getKey(); if(r!=null && r.getValue()>right) right=r.getValue(); map.subMap(left,right).clear(); map.put(left,right); } public boolean queryRange(int left, int right) { var l=map.floorEntry(left); return l!=null && l.getValue()>=right; } public void removeRange(int left, int right) { var l = map.floorEntry(left); var r = map.floorEntry(right); if (l != null && l.getValue() > left) map.put(l.getKey(), left); if (r != null && r.getValue() > right) map.put(right, r.getValue()); map.subMap(left, right).clear(); } } /** * Your RangeModule object will be instantiated and called as such: * RangeModule obj = new RangeModule(); * obj.addRange(left,right); * boolean param_2 = obj.queryRange(left,right); * obj.removeRange(left,right); */