ログインしてください。
提出 #70707927
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
constexpr int INF = 2002002002;
/////////////////// メイン ///////////////////
int main () {
/////////////////// 前入力 ///////////////////
int n;
cin >> n;
/////////////////// 前処理 ///////////////////
// めっちゃ右とめっちゃ左(1e9以上離れた場所)で1人ずつ番兵をおく
// 番兵の外側は自分自身としておくことで、番兵の距離が計算上常に0となる
// 位置を記録
vector<int> vx(n+3,0);
// 自分の左右にいるメンバーを記録
vector<int> vl(n+3,-1);
vector<int> vr(n+3,-1);
// 左右の距離の最小値
vector<int> vd(n+3,0);
// 初期状態(番兵2人)のデータを作る(0番はあとで追加する)
vx.at(n+1) = -INF;
vl.at(n+1) = n+1;
vr.at(n+1) = n+2;
vd.at(n+1) = 0;
vx.at(n+2) = INF;
vl.at(n+2) = n+1;
vr.at(n+2) = n+2;
vd.at(n+2) = 0;
// メンバーの位置を検索する用のset
set <pair<int,int>> st;
st.emplace(-INF,n+1);
st.emplace(INF,n+2);
//////////////// 出力変数定義 ////////////////
int result = 0;
/////////////////// ループ ///////////////////
// 0番から自分で入れる
for (int i=0; i<=n; i++) {
//////////////////// 入力 ////////////////////
int x;
if (i==0) x = 0;
else cin >> x;
//////////////// 出力変数定義 ////////////////
//////////////////// 処理 ////////////////////
// 位置を記録
vx.at(i) = x;
// 左右メンバーを検索してから、検索用データを更新
auto it = st.upper_bound({x,0});
int r = (*it).second;
it--;
int l = (*it).second;
st.emplace(x,i);
// 左右メンバーのデータを合計から一時削除
result -= vd.at(l);
result -= vd.at(r);
// 左右関係を更新
vr.at(l) = i;
vl.at(i) = l;
vl.at(r) = i;
vr.at(i) = r;
// 本人と左右について、距離情報を更新して合計に加算
vector<int> tmp = {l,i,r};
for (int j : tmp) {
vd.at(j) = min(vx.at(j)-vx.at(vl.at(j)),vx.at(vr.at(j))-vx.at(j));
result += vd.at(j);
}
//////////////////// 出力 ////////////////////
if (i!=0) cout << result << endl;
}
/////////////////// 後処理 ///////////////////
//////////////////// 終了 ////////////////////
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Neighbor Distance |
| ユーザ | wightou |
| 言語 | C++23 (GCC 15.2.0) |
| 得点 | 400 |
| コード長 | 2510 Byte |
| 結果 | AC |
| 実行時間 | 705 ms |
| メモリ | 36944 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 400 / 400 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample_01.txt |
| All | sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| sample_01.txt | AC | 1 ms | 3460 KiB |
| test_01.txt | AC | 1 ms | 3488 KiB |
| test_02.txt | AC | 1 ms | 3484 KiB |
| test_03.txt | AC | 475 ms | 36632 KiB |
| test_04.txt | AC | 478 ms | 36648 KiB |
| test_05.txt | AC | 478 ms | 36668 KiB |
| test_06.txt | AC | 477 ms | 36824 KiB |
| test_07.txt | AC | 476 ms | 36732 KiB |
| test_08.txt | AC | 478 ms | 36820 KiB |
| test_09.txt | AC | 460 ms | 36600 KiB |
| test_10.txt | AC | 458 ms | 36620 KiB |
| test_11.txt | AC | 460 ms | 36824 KiB |
| test_12.txt | AC | 457 ms | 36796 KiB |
| test_13.txt | AC | 487 ms | 36904 KiB |
| test_14.txt | AC | 490 ms | 36924 KiB |
| test_15.txt | AC | 485 ms | 36796 KiB |
| test_16.txt | AC | 492 ms | 36848 KiB |
| test_17.txt | AC | 676 ms | 36888 KiB |
| test_18.txt | AC | 678 ms | 36900 KiB |
| test_19.txt | AC | 692 ms | 36936 KiB |
| test_20.txt | AC | 672 ms | 36940 KiB |
| test_21.txt | AC | 691 ms | 36932 KiB |
| test_22.txt | AC | 675 ms | 36912 KiB |
| test_23.txt | AC | 672 ms | 36944 KiB |
| test_24.txt | AC | 698 ms | 36888 KiB |
| test_25.txt | AC | 678 ms | 36712 KiB |
| test_26.txt | AC | 681 ms | 36892 KiB |
| test_27.txt | AC | 682 ms | 36836 KiB |
| test_28.txt | AC | 688 ms | 36792 KiB |
| test_29.txt | AC | 705 ms | 36880 KiB |
| test_30.txt | AC | 689 ms | 36900 KiB |