https://codeforces.com/edu/course/2/lesson/4/1/practice/contest/273169/problem/C
#include <bits/stdc++.h>
using namespace std;
class Node{
public:
long long Min, num;
};
namespace sgt{
using T = long long;
constexpr int INF = 1e9 + 7;
constexpr int rt = 1;
int n;
vector <Node> tree;
Node init(T x, T y) {
return {x, y};
}
Node merge(const Node &a, const Node &b) {
// cerr << "fuogwyief";
Node ret;
if (a.Min < b.Min) { ret = a; }
else if (b.Min < a.Min) { ret = b; }
else { ret = init(a.Min, a.num + b.num); }
return ret;
}
void build(const vector <T> &a, int p = rt, int l = 0, int r = n - 1) {
// cerr << "fuogwyief";
if (l == r) { tree[p] = init(a[l], 1); return; }
auto mid = (l + r) >> 1, lc = p << 1, rc = lc + 1;
build(a, lc, l, mid), build(a, rc, mid + 1, r);
tree[p] = merge(tree[lc], tree[rc]);
}
void sgt(vector <T> &a) {
// cerr << "fuogwyief";
n = a.size();
tree.resize(n << 2);
build(a);
}
void modify(int pos, int v, int p = rt, int l = 0, int r = n - 1) {
// cerr << pos << ' ' << v << ' ' << p << ' ' << l << ' ' << r << '\n';
if (l > pos || r < pos) { return; }
if (l == r && l == pos) { tree[p] = init(v, 1); return; }
auto mid = (l + r) >> 1, lc = p << 1, rc = lc + 1;
modify(pos, v, lc, l, mid), modify(pos, v, rc, mid + 1, r);
tree[p] = merge(tree[lc], tree[rc]);
}
Node query(int L, int R, int p = rt, int l = 0, int r = n - 1) {
// cerr << L << ' ' << R << ' ' << p << ' ' << l << ' ' << r << '\n';
if (l > R || r < l) { return init(INF, 1); }
if (L <= l && r <= R) { return tree[p]; }
auto mid = (l + r) >> 1, lc = p << 1, rc = lc + 1;
// cerr << mid << ' ' << lc << ' ' << rc << '\n';
return merge(query(L, R, rc, mid + 1, r), query(L, R, lc, l, mid));
}
}
void solve() {
int n, m; cin >> n >> m;
vector <long long> a(n); for (auto &i : a) cin >> i;
sgt::sgt(a);
// cerr << "fuogwyief";
while (m--) {
int op, l, r;
cin >> op >> l >> r;
if (op == 1) { sgt::modify(l, r); }
else { Node t = sgt::query(l, r - 1); cout << t.Min << ' ' << t.num << '\n';}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T = 1;
// cin >> T;
while (T--) {
solve();
}
return 0;
}