結果
| 問題 |
No.1332 Range Nearest Query
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-11-10 02:40:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,874 bytes |
| コンパイル時間 | 2,514 ms |
| コンパイル使用メモリ | 209,316 KB |
| 最終ジャッジ日時 | 2025-01-25 15:11:40 |
|
ジャッジサーバーID (参考情報) |
judge7 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 WA * 1 TLE * 32 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int sq;
struct Query {
int idx, l, r, val;
int V;
long long ans;
Query(int ii, int ll, int rr,int vv) :idx(ii), l(ll), r(rr), val(vv), V(l / sq) {}
};
int N, M;
int arr[300010];
set <int> S;
int res;
int main(void)
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> N;
vector <int> v(N + 1);
sq = (int)sqrt(N);
for (int n = 0; n < N; n++)
{
cin >> arr[n];
}
vector<Query> save;
cin >> M;
for (int m = 0; m < M; m++)
{
int u, v, x;
cin >> u >> v >> x;
u--;
v--;
if (u > v)
{
swap(u, v);
}
save.emplace_back(Query(m, u, v, x));
}
sort(save.begin(), save.end(), [&](Query const& a, Query const& b)->bool {
if (a.V == b.V) return a.r < b.r;
return a.V < b.V;
});
int L = save[0].l, R = save[0].l - 1;
for (int m = 0; m < M; m++) {
while (L < save[m].l)
{
S.erase(arr[L]);
L++;
}
while (L > save[m].l)
{
L--;
S.insert(arr[L]);
}
while (R < save[m].r)
{
R++;
S.insert(arr[R]);
}
while (R > save[m].r)
{
S.erase(arr[R]);
R--;
}
int X = save[m].val;
auto it = S.lower_bound(X);
long long int res = 1e9;
if(it!=S.end())
{
long long int d = *it - X;
res = min(res,d);
}
if(it!=S.begin())
{
it--;
long long int d = X - *it;
res = min(res,d);
}
save[m].ans = res;
}
sort(save.begin(), save.end(), [&](Query const& a, Query const& b)->bool
{
return a.idx < b.idx;
});
for (int m = 0; m < M; m++)
{
cout << save[m].ans << '\n';
}
return 0;
}