結果
問題 | No.1170 Never Want to Walk |
ユーザー | milanis48663220 |
提出日時 | 2020-08-14 21:47:43 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 468 ms / 2,000 ms |
コード長 | 1,523 bytes |
コンパイル時間 | 1,254 ms |
コンパイル使用メモリ | 102,472 KB |
実行使用メモリ | 23,424 KB |
最終ジャッジ日時 | 2024-10-10 14:54:58 |
合計ジャッジ時間 | 8,550 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 37 |
ソースコード
#include <iostream> #include <algorithm> #include <iomanip> #include <vector> #include <queue> #include <set> #include <map> using namespace std; typedef long long ll; int x[200000]; map<int, int> ans; int N, A, B; set<int> st; void bfs(int x){ queue<int> que; vector<int> used; que.push(x); st.erase(x); used.push_back(x); while(!que.empty()){ int v = que.front(); que.pop(); // if(st.count(v) == 0) continue; set<int> buf; { auto pl = st.lower_bound(v-B); auto pr = st.upper_bound(v-A); for(auto i = pl; i != pr; i++){ que.push(*i); buf.insert(*i); } } { auto pl = st.lower_bound(v+A); auto pr = st.upper_bound(v+B); for(auto i = pl; i != pr; i++){ que.push(*i); buf.insert(*i); } } for(int i : buf) { st.erase(i); used.push_back(i); } } for(int i : used) ans[i] = used.size(); } const int INF = 2e9; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << setprecision(10) << fixed; cin >> N >> A >> B; for(int i = 0; i < N; i++){ cin >> x[i]; st.insert(x[i]); } st.insert(-INF); st.insert(INF); for(int i = 0; i < N; i++){ if(st.count(x[i]) != 0){ bfs(x[i]); } } for(int i = 0; i < N; i++){ cout << ans[x[i]] << endl; } }