import
java.util.*;
public
class
SegmentTreeLazyPropagation {
static
final
int
MAXN =
100005
;
static
int
n, q, t[] =
new
int
[MAXN <<
2
], lazy[] =
new
int
[MAXN <<
2
];
static
void
build(
int
v,
int
tl,
int
tr) {
if
(tl == tr) {
t[v] =
0
;
}
else
{
int
tm = (tl + tr) /
2
;
build(v *
2
, tl, tm);
build(v *
2
+
1
, tm +
1
, tr);
t[v] = Math.min(t[v *
2
], t[v *
2
+
1
]);
}
}
static
void
push(
int
v) {
t[v *
2
] = t[v *
2
+
1
] = lazy[v];
lazy[v *
2
] = lazy[v *
2
+
1
] = lazy[v];
lazy[v] =
0
;
}
static
void
update(
int
v,
int
tl,
int
tr,
int
l,
int
r,
int
val) {
if
(lazy[v] !=
0
)
push(v);
if
(l > r)
return
;
if
(l == tl && r == tr) {
t[v] = val;
lazy[v] = val;
}
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);
t[v] = Math.min(t[v *
2
], t[v *
2
+
1
]);
}
}
static
int
query(
int
v,
int
tl,
int
tr,
int
l,
int
r) {
if
(lazy[v] !=
0
)
push(v);
if
(l > r)
return
Integer.MAX_VALUE;
if
(l <= tl && tr <= r) {
return
t[v];
}
int
tm = (tl + tr) /
2
;
return
Math.min(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 =
5
;
q =
6
;
int
[][] queries = { {
1
,
0
,
3
,
3
}, {
2
,
1
,
2
}, {
1
,
1
,
4
,
4
},
{
2
,
1
,
3
}, {
2
,
1
,
4
}, {
2
,
3
,
5
} };
build(
1
,
0
, n -
1
);
for
(
int
i =
0
; i < q; i++) {
int
type = queries[i][
0
];
if
(type ==
1
) {
int
l = queries[i][
1
];
int
r = queries[i][
2
];
int
val = queries[i][
3
];
update(
1
,
0
, n -
1
, l, r -
1
, val);
}
else
{
int
l = queries[i][
1
];
int
r = queries[i][
2
];
System.out.println(query(
1
,
0
, n -
1
, l, r -
1
));
}
}
}
}