結果
| 問題 |
No.1170 Never Want to Walk
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-14 22:20:39 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 437 ms / 2,000 ms |
| コード長 | 1,549 bytes |
| コンパイル時間 | 2,557 ms |
| コンパイル使用メモリ | 88,432 KB |
| 実行使用メモリ | 15,744 KB |
| 最終ジャッジ日時 | 2024-10-10 15:41:16 |
| 合計ジャッジ時間 | 8,027 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 37 |
ソースコード
#include <iostream>
#include <vector>
#include <queue>
#include <map>
using namespace std;
int main(){
int N, A, B;
while(cin >> N >> A >> B){
vector<int> x(N);
map<int, int> mp;
for(int i=0;i<N;i++){
cin >> x[i];
mp[x[i]] = i;
}
vector<int> res(N, 0);
vector<int> root(N, -1);
while(!mp.empty()){
int r = mp.begin()->second;
mp.erase(mp.begin());
root[r] = r;
queue<int> qu; qu.push(x[r]);
while(!qu.empty()){
int v = qu.front(); qu.pop();
++res[r];
{
auto s = mp.lower_bound(v - B);
auto e = mp.lower_bound(v - A + 1);
if(s != e){
for(auto it=s;it!=e;it++){
qu.push(it->first);
root[it->second] = r;
}
mp.erase(s, e);
}
}
{
auto s = mp.lower_bound(v + A);
auto e = mp.lower_bound(v + B + 1);
if(s != e){
for(auto it=s;it!=e;it++){
qu.push(it->first);
root[it->second] = r;
}
mp.erase(s, e);
}
}
}
}
for(int i=0;i<N;i++) cout << res[root[i]] << endl;
}
}