Skip to content

Commit b44d67c

Browse files
Segments covering by points
1 parent d0ac8d4 commit b44d67c

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package algorithms.segments_covering_by_points;
2+
3+
import java.util.Arrays;
4+
import java.util.Scanner;
5+
import java.util.Vector;
6+
7+
public class Main {
8+
private void run() {
9+
Scanner scanner = new Scanner(System.in);
10+
int segmentsCount = scanner.nextInt();
11+
Segment[] segments = new Segment[segmentsCount];
12+
for (int i = 0; i < segmentsCount; i++) {
13+
int left = scanner.nextInt();
14+
int right = scanner.nextInt();
15+
segments[i] = new Segment(left, right);
16+
}
17+
18+
Arrays.sort(segments);
19+
Vector<Integer> usedPoints = new Vector<>();
20+
for (int i = 0; i < segments.length; i++) {
21+
if (segments[i].isMarked()) {
22+
continue;
23+
}
24+
usedPoints.add(segments[i].getRight());
25+
segments[i].setMarked(true);
26+
for (int j = i + 1; j < segments.length; j++) {
27+
if (segments[j].getLeft() <= usedPoints.lastElement()) {
28+
segments[j].setMarked(true);
29+
} else {
30+
break;
31+
}
32+
}
33+
}
34+
35+
StringBuilder outputBuilder = new StringBuilder();
36+
outputBuilder.append(String.format("%d\n", usedPoints.size()));
37+
for (int point : usedPoints) {
38+
outputBuilder.append(String.format("%d ", point));
39+
}
40+
System.out.println(outputBuilder.toString());
41+
}
42+
43+
public static void main(String[] args) {
44+
new Main().run();
45+
}
46+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package algorithms.segments_covering_by_points;
2+
3+
public class Segment implements Comparable<Segment>
4+
{
5+
private Integer left;
6+
private Integer right;
7+
private boolean marked;
8+
9+
Segment(int left, int right) {
10+
this.left = left;
11+
this.right = right;
12+
marked = false;
13+
}
14+
15+
@Override
16+
public int compareTo(Segment o) {
17+
return this.right.compareTo(o.right);
18+
}
19+
20+
public Integer getRight() {
21+
return right;
22+
}
23+
24+
public void setRight(Integer right) {
25+
this.right = right;
26+
}
27+
28+
public Integer getLeft() {
29+
return left;
30+
}
31+
32+
public void setLeft(Integer left) {
33+
this.left = left;
34+
}
35+
36+
public boolean isMarked() {
37+
return marked;
38+
}
39+
40+
public void setMarked(boolean marked) {
41+
this.marked = marked;
42+
}
43+
};

0 commit comments

Comments
 (0)