fork download
  1.  
  2. import java.util.TreeMap;
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. class Ideone
  8. {
  9. public static void main (String[] args) throws java.lang.Exception
  10. {
  11. System.out.println("Test Start!");
  12. System.out.println("--------------");
  13.  
  14. IntervalDataSet data = new IntervalDataSet ();
  15.  
  16. data.insert(new Interval( 1,3, 0 ));
  17. data.insert(new Interval( 2,4, 1 ));
  18. data.insert(new Interval( 3,5, 3 ));
  19. data.insert(new Interval( 4,6, 4 ));
  20. System.out.println("initial values");
  21. data.print();
  22.  
  23. System.out.println("--------------");
  24. System.out.println("Intervals overlapping [2,3]");
  25.  
  26. data.printOverlappingIntervals(new Interval( 2,3, -1 ));
  27. System.out.println("--------------");
  28.  
  29. System.out.println("change depth 0 to 2");
  30. data.changeDepth( 0, 2 );
  31. data.print();
  32. System.out.println("--------------");
  33.  
  34. System.out.println("remove depth 4");
  35. data.remove( 4 );
  36. data.print();
  37. System.out.println("--------------");
  38.  
  39. System.out.println("change depth 1 to 4");
  40. data.changeDepth( 1, 4 );
  41. data.print();
  42. System.out.println("--------------");
  43.  
  44. System.out.println("Test End!");
  45. }
  46. }
  47.  
  48. class Interval
  49. {
  50. public int min;
  51. public int max;
  52. public int depth;
  53.  
  54. public Interval (int min, int max, int depth)
  55. {
  56. this.min = min;
  57. this.max = max;
  58. this.depth = depth;
  59. }
  60.  
  61. public boolean intersect (Interval b)
  62. {
  63. return (b != null
  64. && ((this.min >= b.min && this.min <= b.max)
  65. || (this.max >= b.min && this.max <= b.max))
  66. );
  67. }
  68.  
  69. public void print ()
  70. {
  71. System.out.println(depth+" => ["+min+","+max+"] ");
  72. }
  73. }
  74.  
  75. class IntervalDataSet
  76. {
  77. private TreeMap<Integer,Interval> map;
  78.  
  79. public IntervalDataSet ()
  80. {
  81. map = new TreeMap<Integer,Interval> ();
  82. }
  83.  
  84. public void print ()
  85. {
  86. for(Map.Entry<Integer,Interval> entry : map.entrySet())
  87. {
  88. Integer key = entry.getKey();
  89. Interval value = entry.getValue();
  90.  
  91. System.out.println(key+" => ["+value.min+","+value.max+"] ");
  92. }
  93. }
  94.  
  95. public boolean changeDepth (int depth, int newDepth)
  96. {
  97. if (!map.containsKey(depth)) return false;
  98.  
  99. if (map.containsKey(newDepth)) return false;
  100.  
  101. Interval in = map.get(depth);
  102.  
  103. in.depth = newDepth;
  104.  
  105. remove(depth); insert(in);
  106.  
  107. return true;
  108. }
  109.  
  110. public boolean insert (Interval in)
  111. {
  112. if (in == null) return false;
  113.  
  114. if (map.containsKey(in.depth)) return false;
  115.  
  116. map.put(in.depth, in); return true;
  117. }
  118.  
  119. public boolean remove (int depth)
  120. {
  121. if (!map.containsKey(depth)) return false;
  122.  
  123. map.remove(depth); return true;
  124. }
  125.  
  126. public Interval get (int depth)
  127. {
  128. return map.get(depth);
  129. }
  130.  
  131. public void print (int depth)
  132. {
  133. if (!map.containsKey(depth))
  134. System.out.println(depth+" => X ");
  135. else
  136. System.out.println(depth+" => ["
  137. +map.get(depth).min+","+map.get(depth).max+"] ");
  138. }
  139.  
  140. public void printOverlappingIntervals (Interval in)
  141. {
  142. for (Interval interval : map.values())
  143. if (interval.intersect(in))
  144. interval.print();
  145. }
  146.  
  147. public ArrayList<Interval> getOverlappingIntervals (Interval in)
  148. {
  149. ArrayList<Interval> list = new ArrayList<Interval>();
  150.  
  151. for (Interval interval : map.values())
  152. if (interval.intersect(in))
  153. list.add(interval);
  154.  
  155. return list;
  156. }
  157.  
  158. public int size ()
  159. {
  160. return map.size();
  161. }
  162. }
  163.  
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
Test Start!
--------------
initial values
0 => [1,3] 
1 => [2,4] 
3 => [3,5] 
4 => [4,6] 
--------------
Intervals overlapping [2,3]
0 => [1,3] 
1 => [2,4] 
3 => [3,5] 
--------------
change depth 0 to 2
1 => [2,4] 
2 => [1,3] 
3 => [3,5] 
4 => [4,6] 
--------------
remove depth 4
1 => [2,4] 
2 => [1,3] 
3 => [3,5] 
--------------
change depth 1 to 4
2 => [1,3] 
3 => [3,5] 
4 => [2,4] 
--------------
Test End!