Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- // tiom4eg's precompiler options
- // POGGERS POGGERS POGGERS POGGERS POGGERS POGGERS POGGERS
- // IO settings
- #define fastIO ios_base::sync_with_stdio(false); cin.tie(0)
- // Quick types
- #define ll long long
- #define ld long double
- #define ull unsigned long long
- #define pii pair <int, int>
- #define pll pair <ll, ll>
- #define vi vector <int>
- #define mi vector <vector <int> >
- // Quick functions
- #define endl "\n"
- #define F first
- #define S second
- #define all(a) a.begin(), a.end()
- #define sz(a) a.size()
- #define pb push_back
- #define mp make_pair
- #define fint(n) int n; cin >> n
- #define fstr(s) string s; cin >> s
- #define farr(a, n) int a[n]; for (int pog = 0; pog < n; ++pog) cin >> a[pog]
- #define min(a, b) ((a < b) ? (a) : (b))
- #define max(a, b) ((a > b) ? (a) : (b))
- // Quick fors
- #define FOR(i, a, b) for (ll i = a; i < b; ++i)
- #define FOR1(s, n) for (int i = s; i < n; ++i)
- #define FOR2(s, n) for (int j = s; j < n; ++j)
- #define FOR3(s, n) for (int k = s; k < n; ++k)
- #define RFOR(n, s) for (int l = n; l >= s; --l)
- // Pragmas
- #pragma GCC optimize("Ofast") // let the chaos begin!
- #pragma GCC optimize ("unroll-loops")
- #pragma target("avx,fma")
- #pragma comment(linker, "/stack:200000000")
- #pragma target("tune=native")
- // PBDS
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- #define ordered_set tree <int, null_type, less <int>, rb_tree_tag, tree_order_statistics_node_update>
- #define ook order_of_key
- #define fbo find_by_order
- // POGGERS POGGERS POGGERS POGGERS POGGERS POGGERS POGGERS
- using namespace std;
- using namespace __gnu_pbds;
- mt19937 rng(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
- int sz = 1;
- struct segtree {
- struct node {
- int v = 0, d = -1;
- };
- vector <node> tree;
- void build(int n) {
- while (sz < n) sz <<= 1;
- tree.resize(2 * sz);
- }
- void push(int node) {
- if (node >= sz || tree[node].d == -1) return;
- tree[node * 2].d = tree[node].d;
- tree[node * 2 + 1].d = tree[node].d;
- tree[node * 2].v = tree[node * 2].d;
- tree[node * 2 + 1].v = tree[node * 2 + 1].d;
- tree[node].d = -1;
- }
- void upd(int ql, int qr, int x, int node = 1, int nl = 0, int nr = sz) {
- push(node);
- if (nl >= qr || ql >= nr) return;
- if (ql <= nl && nr <= qr) {
- tree[node].d = x;
- tree[node].v = x;
- return;
- }
- int nm = (nl + nr) / 2;
- upd(ql, qr, x, node * 2, nl, nm);
- upd(ql, qr, x, node * 2 + 1, nm, nr);
- tree[node].v = min(tree[node * 2].v, tree[node * 2 + 1].v);
- }
- int get(int ql, int qr, int node = 1, int nl = 0, int nr = sz) {
- push(node);
- if (nl >= qr || ql >= nr) return 2e9;
- if (ql <= nl && nr <= qr) return tree[node].v;
- int nm = (nl + nr) / 2;
- return min(get(ql, qr, node * 2, nl, nm), get(ql, qr, node * 2 + 1, nm, nr));
- }
- };
- int main() {
- fastIO;
- int n, m; cin >> n >> m;
- segtree t;
- t.build(n);
- FOR1(0, m) {
- int op, l, r; cin >> op >> l >> r;
- if (op == 1) {
- int v; cin >> v;
- t.upd(l, r, v);
- }
- else cout << t.get(l, r) << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement