結果
問題 |
No.3116 More and more teleporter
|
ユーザー |
|
提出日時 | 2025-04-19 02:44:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,461 bytes |
コンパイル時間 | 2,317 ms |
コンパイル使用メモリ | 206,840 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-04-19 02:44:18 |
合計ジャッジ時間 | 6,136 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 2 WA * 20 |
ソースコード
#include <bits/stdc++.h> //#include "atcoder/all" #pragma GCC target("avx2") #pragma GCC optimize("Ofast") using namespace std; using i64 = long long; void solve(){ int n, q; cin >> n >> q; std::map<int,i64> tel; tel.emplace(0, 0); for(int i = 0; i < q; ++i){ int ty; cin >> ty; if(ty == 1){ int x; cin >> x; --x; i64 cost = 1e18; auto it = tel.lower_bound(x); if(it != tel.end()){ cost = min(cost, abs(it->first - x) + it->second); } auto prev_it = prev(it); cost = min(cost, abs(prev_it->first - x) + prev_it->second); cout << cost << endl; } else{ int x; i64 c; cin >> x >> c; --x; auto it = tel.lower_bound(x); bool fl = true; while(it != tel.end()){ if(abs(it->first - x) + c < it->second){ it = tel.erase(it); } else if(abs(it->first - x) + it->second <= c){ fl = false; break; } else{ break; } } it = prev(tel.upper_bound(x)); while(it != tel.begin()){ if(abs(it->first - x) + c < it->second){ it = tel.erase(it); --it; } else if(abs(it->first - x) + it->second <= c){ fl = false; break; } else{ break; } } if(fl){ tel.emplace(x, c); } } } } signed main(){ solve(); }