結果
問題 | No.1170 Never Want to Walk |
ユーザー | pes_magic |
提出日時 | 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; } }