結果
問題 |
No.3116 More and more teleporter
|
ユーザー |
![]() |
提出日時 | 2025-04-19 00:44:22 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 195 ms / 2,000 ms |
コード長 | 956 bytes |
コンパイル時間 | 5,289 ms |
コンパイル使用メモリ | 332,452 KB |
実行使用メモリ | 12,716 KB |
最終ジャッジ日時 | 2025-04-19 00:44:32 |
合計ジャッジ時間 | 8,024 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; #define FAST_IO \ ios::sync_with_stdio(false); \ cin.tie(0); const i64 INF = 1001001001001001001; using Modint = atcoder::static_modint<998244353>; i64 op(i64 a, i64 b) { return min(a, b); } i64 e() { return INF; } int main() { FAST_IO auto ans = 0LL; int N, Q; cin >> N >> Q; atcoder::segtree<i64, op, e> segL(N), segR(N); for (int i = 0; i < Q; i++) { int t; cin >> t; if (t == 1) { int x; cin >> x; x--; i64 v = x; v = min(v, segL.prod(0, x + 1) + x); v = min(v, segR.prod(x, N) - x); cout << v << endl; } else if (t == 2) { int x; i64 c; cin >> x >> c; x--; segL.set(x, min(c - x, segL.get(x))); segR.set(x, min(c + x, segR.get(x))); } } }