/* 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
{
{
List<MyTime> myTimeList = new ArrayList<MyTime>();
myTimeList.add(new MyTime(7, 9));
myTimeList.add(new MyTime(9, 15));
myTimeList.add(new MyTime(2, 6));
myTimeList.add(new MyTime(1, 5));
myTimeList.add(new MyTime(2, 4));
myTimeList.add(new MyTime(10, 12));
System.
out.
println(myTimeList.
size());
s.push(0);
e.push(0);
for (MyTime time : myTimeList)
{
System.
out.
println(time.
getStart() + " " + time.
getEnd()); if (time.getStart() > time.getEnd())
throw new Exception("The time is incorrect.");
if (time.getStart() > (int)e.peek()) //没有交集
{
s.push(time.getStart());
e.push(time.getEnd());
}
else if (time.getEnd() > (int)e.peek()) //有部分交集,取并集
{
e.pop();
e.push(time.getEnd());
}
//else {} //完全被覆盖
}
int total = 0;
while (!s.empty())
{
System.
out.
println(s.
peek() + " ~ " + e.
peek()); total += (int)e.pop() - (int)s.pop();
}
System.
out.
println("Total: " + total
); }
}
class MyTime implements Comparable<MyTime>
{
private int start;
private int end;
MyTime(){}
MyTime(int start, int end)
{
this.start = start;
this.end = end;
}
public int getStart()
{
return start;
}
public int getEnd()
{
return end;
}
public int compareTo(MyTime other)
{
if (start == other.start)
{
return other.end - end;
}
return start - other.start;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KICB7CiAgICBMaXN0PE15VGltZT4gbXlUaW1lTGlzdCA9IG5ldyBBcnJheUxpc3Q8TXlUaW1lPigpOwogICAgbXlUaW1lTGlzdC5hZGQobmV3IE15VGltZSg3LCA5KSk7CiAgICBteVRpbWVMaXN0LmFkZChuZXcgTXlUaW1lKDksIDE1KSk7CiAgICBteVRpbWVMaXN0LmFkZChuZXcgTXlUaW1lKDIsIDYpKTsKICAgIG15VGltZUxpc3QuYWRkKG5ldyBNeVRpbWUoMSwgNSkpOwogICAgbXlUaW1lTGlzdC5hZGQobmV3IE15VGltZSgyLCA0KSk7CiAgICBteVRpbWVMaXN0LmFkZChuZXcgTXlUaW1lKDEwLCAxMikpOwogICAgCiAgICBDb2xsZWN0aW9ucy5zb3J0KG15VGltZUxpc3QpOwogICAgCiAgICBTeXN0ZW0ub3V0LnByaW50bG4obXlUaW1lTGlzdC5zaXplKCkpOwogICAgCiAgICBTdGFjayBzID0gbmV3IFN0YWNrKCk7CiAgICBTdGFjayBlID0gbmV3IFN0YWNrKCk7CiAgICBzLnB1c2goMCk7CiAgICBlLnB1c2goMCk7CiAgICBmb3IgKE15VGltZSB0aW1lIDogbXlUaW1lTGlzdCkKICAgIHsKICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRpbWUuZ2V0U3RhcnQoKSArICIgIiArIHRpbWUuZ2V0RW5kKCkpOwogICAgICBpZiAodGltZS5nZXRTdGFydCgpID4gdGltZS5nZXRFbmQoKSkKICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgdGltZSBpcyBpbmNvcnJlY3QuIik7CiAgICAgICAgCiAgICAgIGlmICh0aW1lLmdldFN0YXJ0KCkgPiAoaW50KWUucGVlaygpKSAvL+ayoeacieS6pOmbhgogICAgICB7CiAgICAgICAgcy5wdXNoKHRpbWUuZ2V0U3RhcnQoKSk7CiAgICAgICAgZS5wdXNoKHRpbWUuZ2V0RW5kKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHRpbWUuZ2V0RW5kKCkgPiAoaW50KWUucGVlaygpKSAvL+aciemDqOWIhuS6pOmbhu+8jOWPluW5tumbhgogICAgICB7CiAgICAgICAgZS5wb3AoKTsKICAgICAgICBlLnB1c2godGltZS5nZXRFbmQoKSk7CiAgICAgIH0KICAgICAgLy9lbHNlIHt9IC8v5a6M5YWo6KKr6KaG55uWCiAgICB9CiAgICAKICAgIGludCB0b3RhbCA9IDA7CiAgICB3aGlsZSAoIXMuZW1wdHkoKSkKICAgIHsKICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMucGVlaygpICsgIiB+ICIgKyBlLnBlZWsoKSk7CiAgICAgIHRvdGFsICs9IChpbnQpZS5wb3AoKSAtIChpbnQpcy5wb3AoKTsKICAgIH0KICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWw6ICIgKyB0b3RhbCk7CiAgfQp9CgpjbGFzcyBNeVRpbWUgaW1wbGVtZW50cyBDb21wYXJhYmxlPE15VGltZT4KewogIHByaXZhdGUgaW50IHN0YXJ0OwogIHByaXZhdGUgaW50IGVuZDsKICBNeVRpbWUoKXt9CiAgTXlUaW1lKGludCBzdGFydCwgaW50IGVuZCkKICB7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICB9CiAgcHVibGljIGludCBnZXRTdGFydCgpCiAgewogICAgcmV0dXJuIHN0YXJ0OwogIH0KICBwdWJsaWMgaW50IGdldEVuZCgpCiAgewogICAgcmV0dXJuIGVuZDsKICB9CiAgcHVibGljIGludCBjb21wYXJlVG8oTXlUaW1lIG90aGVyKQogIHsKICAgIGlmIChzdGFydCA9PSBvdGhlci5zdGFydCkKICAgIHsKICAgICAgcmV0dXJuIG90aGVyLmVuZCAtIGVuZDsKICAgIH0KICAgIHJldHVybiBzdGFydCAtIG90aGVyLnN0YXJ0OwogIH0KfQ==