Помогите пож найти ошибку в коде

Вот задача https://codeforces.com/edu/course/2/lesson/4/1/practice/contest/273169/problem/C. У меня падает код на 74 тесте, по входным данным не думаю что из-за переполнения. Вот код:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
#define s second
#define mp make_pair
int inf = 200000;

pair<int, int> t[400000];

pair<int, int> combine(pair<int, int>a, pair<int, int> b) {
    if (a.first < b.first)
        return a;
    if (b.first < a.first)
        return b;
    return make_pair(a.first, (a.s + b.s));
}

void build(vector<int>& a, int p, int l, int r) {
    if (l == r) {
        t[p] = mp(a[l], 1);
    }
    else {
        int m = (r + l) / 2;
        build(a, 2 * p, l, m);
        build(a, 2 * p + 1, m + 1, r);
        t[p] = combine(t[p * 2], t[p * 2 + 1]);
    }
}

pair<int, int> query(int p, int l, int r, int l1, int r1) {
    if (l1 > r1) {
        return mp(INT_MAX, 0);
    }
    if (l1 == l && r == r1) {
        return t[p];
    }
    int m = (r + l) / 2;
    return combine(
        query(p * 2, l, m, l1, min(m, r1)),
        query(p * 2 + 1, m + 1, r, max(m + 1, l1), r1)
    );
}

void update(int p, int l, int r, int vp, int nv) {
    if (l == r) {
        t[p] = mp(nv, 1);
    }
    else {
        int m = (r + l) / 2;
        if (vp <= m) {
            update(2 * p, l, m, vp, nv);
        }
        else {
            update(2 * p + 1, m + 1, r, vp, nv);
        }
        t[p] = combine(t[p * 2], t[p * 2 + 1]);
    }
}

int main() {
    int n, m;
    cin >> n >> m;
    vector <int> a1(n);
    for (int i = 0; i < n; i++) {
        cin >> a1[i];
    }
    build(a1, 1, 0, n - 1);
    while (m--) {
        int a, b, c;
        cin >> a >> b >> c;
        if (a == 1) {
            update(1, 0, n - 1, b, c);
        }
        else {
            pair<int, int> q = query(1, 0, n - 1, b, c - 1);
            cout << q.first << " " << q.second << endl;
        }   
    }
    return 0;
}

Буду благодарен!


Ответы (0 шт):