import
java.util.*;
class
Proto_Van_Emde_Boas {
int
universe_size;
Proto_Van_Emde_Boas summary;
ArrayList<Proto_Van_Emde_Boas> clusters;
Proto_Van_Emde_Boas(
int
size) {
universe_size = size;
if
(size <=
2
) {
summary =
null
;
clusters =
new
ArrayList<Proto_Van_Emde_Boas>(size);
for
(
int
i =
0
; i < size; i++) {
clusters.add(
null
);
}
}
else
{
summary =
new
Proto_Van_Emde_Boas(root(size));
clusters =
new
ArrayList<Proto_Van_Emde_Boas>(root(size));
for
(
int
i =
0
; i < root(size); i++) {
clusters.add(
new
Proto_Van_Emde_Boas(root(size)));
}
}
}
int
root(
int
u) {
return
(
int
) Math.sqrt(u);
}
int
high(
int
x) {
return
x / root(universe_size);
}
int
low(
int
x) {
return
x % root(universe_size);
}
int
generate_index(
int
cluster,
int
position) {
return
cluster * root(universe_size) + position;
}
}
class
Solution {
public
static
boolean
isMember(Proto_Van_Emde_Boas helper,
int
key) {
if
(key >= helper.universe_size) {
return
false
;
}
if
(helper.universe_size ==
2
) {
return
helper.clusters.get(key) !=
null
;
}
else
{
return
isMember(helper.clusters.get(helper.high(key)), helper.low(key));
}
}
public
static
void
insert(Proto_Van_Emde_Boas helper,
int
key) {
if
(helper.universe_size ==
2
) {
helper.clusters.set(key,
new
Proto_Van_Emde_Boas(
1
));
}
else
{
insert(helper.clusters.get(helper.high(key)), helper.low(key));
insert(helper.summary, helper.high(key));
}
}
public
static
void
pveb_delete(Proto_Van_Emde_Boas helper,
int
key) {
if
(helper.universe_size ==
2
) {
if
(helper.clusters.get(key) !=
null
) {
helper.clusters.set(key,
null
);
}
}
else
{
pveb_delete(helper.clusters.get(helper.high(key)), helper.low(key));
boolean
isanyinCluster =
false
;
for
(
int
i = helper.high(key) * helper.root(helper.universe_size);
i < (helper.high(key) +
1
) * helper.root(helper.universe_size);
i++) {
if
(isMember(helper.clusters.get(helper.high(key)), i)) {
isanyinCluster =
true
;
break
;
}
}
if
(!isanyinCluster) {
pveb_delete(helper.summary, helper.high(key));
}
}
}
public
static
void
main(String[] args) {
Proto_Van_Emde_Boas hello =
new
Proto_Van_Emde_Boas(
4
);
System.out.println(isMember(hello,
2
));
insert(hello,
2
);
insert(hello,
3
);
System.out.println(isMember(hello,
2
));
pveb_delete(hello,
2
);
System.out.println(isMember(hello,
2
));
}
}