import
java.util.*;
public
class
SegmentTreeLazyPropagation {
static
final
int
MAXN =
100005
;
static
final
int
MAXV =
30
;
static
int
n, m;
static
int
[] a =
new
int
[MAXN];
static
int
[][] t =
new
int
[MAXN <<
2
][MAXV];
static
int
[][] lazy =
new
int
[MAXN <<
2
][MAXV];
static
void
build(
int
v,
int
tl,
int
tr) {
if
(tl == tr) {
for
(
int
i =
0
; i < MAXV; i++) {
t[v][i] = ((a[tl] >> i) &
1
);
}
}
else
{
int
tm = (tl + tr) /
2
;
build(v *
2
, tl, tm);
build(v *
2
+
1
, tm +
1
, tr);
for
(
int
i =
0
; i < MAXV; i++) {
t[v][i] = t[v *
2
][i] & t[v *
2
+
1
][i];
}
}
}
static
void
push(
int
v,
int
tl,
int
tr) {
if
(tl != tr) {
for
(
int
i =
0
; i < MAXV; i++) {
if
(lazy[v][i] !=
0
) {
t[v *
2
][i] = t[v *
2
+
1
][i] = lazy[v *
2
][i] = lazy[v *
2
+
1
][i] =
1
;
lazy[v][i] =
0
;
}
}
}
}
static
void
update(
int
v,
int
tl,
int
tr,
int
l,
int
r,
int
val) {
push(v, tl, tr);
if
(l > r)
return
;
if
(l == tl && r == tr) {
for
(
int
i =
0
; i < MAXV; i++) {
if
(((val >> i) &
1
) ==
1
) {
t[v][i] = lazy[v][i] =
1
;
}
}
}
else
{
int
tm = (tl + tr) /
2
;
update(v *
2
, tl, tm, l, Math.min(r, tm), val);
update(v *
2
+
1
, tm +
1
, tr, Math.max(l, tm +
1
), r, val);
for
(
int
i =
0
; i < MAXV; i++) {
t[v][i] = t[v *
2
][i] & t[v *
2
+
1
][i];
}
}
}
static
int
query(
int
v,
int
tl,
int
tr,
int
l,
int
r) {
push(v, tl, tr);
if
(l > r)
return
(
1
<< MAXV) -
1
;
if
(l <= tl && tr <= r) {
int
res =
0
;
for
(
int
i =
0
; i < MAXV; i++) {
if
(t[v][i] ==
1
) {
res |= (
1
<< i);
}
}
return
res;
}
int
tm = (tl + tr) /
2
;
return
query(v *
2
, tl, tm, l, Math.min(r, tm)) &
query(v *
2
+
1
, tm +
1
, tr, Math.max(l, tm +
1
), r);
}
public
static
void
main(String[] args) {
n =
2
;
m =
3
;
int
[][] operations = { {
1
,
0
,
1
,
3
}, {
1
,
1
,
2
,
9
}, {
2
,
0
,
2
} };
build(
1
,
0
, n -
1
);
for
(
int
i =
0
; i < m; i++) {
int
type = operations[i][
0
];
if
(type ==
1
) {
int
l = operations[i][
1
];
int
r = operations[i][
2
];
int
val = operations[i][
3
];
update(
1
,
0
, n -
1
, l, r -
1
, val);
}
else
{
int
l = operations[i][
1
];
int
r = operations[i][
2
];
System.out.println(query(
1
,
0
, n -
1
, l, r -
1
));
}
}
}
}