Luvut 1,2,\dots,n ovat aluksi jokainen omassa joukossaan. Tehtäväsi on toteuttaa luokka, jossa voi yhdistää kaksi joukkoa sekä hakea suurimman joukon koon.
Voit olettaa, että n on enintään 10^5 ja luokan metodeita kutsutaan enintään 10^5 kertaa.
Python
Toteuta tiedostoon maxset.py luokka MaxSet, jossa on seuraavat metodit:
- konstruktori, jolle annetaan lukujen määrä
mergeyhdistää joukot, joissa on luvut a ja b (jos ne ovat eri joukoissa)get_maxilmoittaa suurimman joukon koon
class MaxSet:
def __init__(self,n):
# TODO
def merge(self,a,b):
# TODO
def get_max(self):
# TODO
if __name__ == "__main__":
m = MaxSet(5)
print(m.get_max()) # 1
m.merge(1,2)
m.merge(3,4)
m.merge(3,5)
print(m.get_max()) # 3
m.merge(1,5)
print(m.get_max()) # 5
Java
Toteuta tiedostoon MaxSet.java luokka MaxSet, jossa on seuraavat metodit:
- konstruktori, jolle annetaan lukujen määrä
mergeyhdistää joukot, joissa on luvut a ja b (jos ne ovat eri joukoissa)getMaxilmoittaa suurimman joukon koon
public class MaxSet {
public MaxSet(int n) {
// TODO
}
public void merge(int a, int b) {
// TODO
}
public int getMax() {
// TODO
}
public static void main(String[] args) {
MaxSet m = new MaxSet(5);
System.out.println(m.getMax()); // 1
m.merge(1,2);
m.merge(3,4);
m.merge(3,5);
System.out.println(m.getMax()); // 3
m.merge(1,5);
System.out.println(m.getMax()); // 5
}
}
