結果
| 問題 |
No.1950 片道きゃっちぼーる
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-05-20 23:39:30 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,354 bytes |
| コンパイル時間 | 1,116 ms |
| コンパイル使用メモリ | 99,124 KB |
| 最終ジャッジ日時 | 2025-01-29 11:56:09 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 WA * 7 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <set>
#include <map>
#include <queue>
#include <stack>
using namespace std;
int main()
{
int N;
cin >> N;
vector<long long> X(N), A(N);
for (int i = 0; i < N; i++)
cin >> X[i];
for (int i = 0; i < N; i++)
cin >> A[i];
vector<pair<long long, int>> a(N + 1);
long long INF = 1000000000000000;
X.push_back(-INF);
sort(X.begin(), X.end());
A.insert(A.begin(), -INF);
for (int i = 0; i < N + 1; i++)
{
a[i] = {A[i] + X[i], i};
}
X.push_back(INF);
A.push_back(INF);
sort(a.begin(), a.end());
vector<long long> res(N + 1);
for (int i = N; i >= 1; i--)
{
auto [num, id] = a[i];
int r = lower_bound(X.begin(), X.end(), A[id] + X[id]) - X.begin();
int l = lower_bound(X.begin(), X.end(), X[id] - A[id]) - X.begin();
long long temp = 0;
if (X[r] == A[id] + X[id])
{
temp = max(temp, res[r]);
}
if (X[l] == X[id] - A[id])
{
temp = max(temp, res[l]);
}
if (num < temp)
{
res[id] = temp;
}
else
{
res[id] = num;
}
}
for (int i = 1; i <= N; i++)
{
cout << res[i] - X[i] << endl;
}
}