```java= public class AD { int start; int end; boolean status = false; //true : on, false: pause AD(int s, int e, boolean st) { this.start = s; this.end = e; this.status = st; } } public static void main(String[] args) { AD[] ads = new AD[]{ new AD(1, 9, true), new AD(2, 5, false), new AD(10, 15, true), new AD(13, 18, false), new AD(17, 20, true) }; List<AD> onADs = new ArrayList<>(); List<AD> pauseADs = new ArrayList<>(); for (int i = 0; i < ads.length; i++) { if (ads[i].status) { onADs.add(ads[i]); } else { pauseADs.add(ads[i]); } } List<AD> onSeg = new ArrayList<>(); int pI = 0, oI = 0; while (oI < onADs.size()) { AD on = onADs.get(oI); if (pI >= pauseADs.size()) { onSeg.add(new AD(on.start, on.end, true)); oI++; } else { AD pa = pauseADs.get(pI); if (pa.start > on.end) { //case 1 沒交集 System.out.println(1); onSeg.add(new AD(on.start, on.end, true)); oI++; } else if (pa.end < on.start) { // case 2 沒交集 System.out.println(2); pI++; } else if (on.start < pa.start && on.end < pa.end) { //case 3 on end > p start System.out.println(3); onSeg.add(new AD(on.start, pa.start - 1, true)); oI++; } else if (on.start > pa.start && pa.end > on.start && on.end > pa.end) { //case 4 p end > on start System.out.println(4); onSeg.add(new AD(pa.end + 1, on.end, true)); oI++; } else if (on.start > pa.start && on.end < pa.end) { // case 5 whole on seg in pa seg System.out.println(5); oI++; } else if (on.start < pa.start && on.end > pa.end) { // case 5 whole pa seg in on seg System.out.println(6); onSeg.add(new AD(on.start, pa.start - 1, true)); onSeg.add(new AD(pa.end + 1, on.end, true)); oI++; pI++; } } } for (int i = 0; i < onSeg.size(); i++) { AD aa = onSeg.get(i); System.out.println(aa.start + " " + aa.end); } } ``` ``` output 1 1 6 9 10 12 19 20 ```