- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Помогите пож найти ошибку в коде
Вот задача 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;
}
Буду благодарен!