結果
| 問題 | No.875 Range Mindex Query |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-05-11 09:37:34 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 162 ms / 2,000 ms |
| コード長 | 1,785 bytes |
| 記録 | |
| コンパイル時間 | 2,398 ms |
| コンパイル使用メモリ | 335,876 KB |
| 実行使用メモリ | 7,972 KB |
| 最終ジャッジ日時 | 2026-05-11 09:37:44 |
| 合計ジャッジ時間 | 5,360 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 18 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using i32 = int;
using i64 = long long;
#define int i64
template <class S, S (*op)(S, S), S (*e)()> struct Segtree {
vector<S> t;
int n;
Segtree(int N) : t(2 * N, e()), n(N) {}
void set(int i, S value) {
t[i += n] = value;
for (i >>= 1; i; i >>= 1)
t[i] = op(t[i << 1], t[i << 1 | 1]);
} // 630e57
S query(int l, int r) {
S al = e(), ar = e();
for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
if (l & 1)
al = op(al, t[l++]);
if (r & 1)
ar = op(t[--r], ar);
}
return op(al, ar);
} // 9ee903
};
pair<int, int> mmin(pair<int, int> first, pair<int, int> second) {
return min(first, second);
}
pair<int, int> neu() { return {1e18, 1e18}; }
using MinSegtree = Segtree<pair<int, int>, mmin, neu>;
signed main() {
int n, q;
cin >> n >> q;
MinSegtree st(n + 1);
vector<pair<int, int>> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i].first;
a[i].second = i;
st.set(i, a[i]);
}
auto one = [&](int left, int right) {
pair<int, int> left_val = st.query(left, left + 1);
pair<int, int> right_val = st.query(right, right + 1);
swap(left_val.first, right_val.first);
st.set(left_val.second, left_val);
st.set(right_val.second, right_val);
};
auto two = [&](int left, int right) {
pair<int, int> res = st.query(left, right + 1);
cout << res.second << endl;
};
while (q--) {
int opt;
int l, r;
cin >> opt;
cin >> l >> r;
if (opt == 1) {
one(l, r);
} else {
two(l, r);
}
}
return 0;
}
vjudge1