結果
| 問題 |
No.1170 Never Want to Walk
|
| コンテスト | |
| ユーザー |
lion_Iob
|
| 提出日時 | 2020-08-16 15:10:31 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,161 bytes |
| コンパイル時間 | 1,787 ms |
| コンパイル使用メモリ | 172,128 KB |
| 実行使用メモリ | 11,680 KB |
| 最終ジャッジ日時 | 2024-10-11 13:24:24 |
| 合計ジャッジ時間 | 8,218 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 TLE * 1 -- * 6 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)
#define rep_lr(i,l,r) for(int i=(l);i<(r);i++)
#define all(x) (x).begin(),(x).end()
#define V vector
typedef V<int> vi;
typedef V<vi> vvi;
typedef long long ll;
typedef pair<ll, ll> P;
typedef tuple<int, int, int> T;
constexpr int INF = INT_MAX >> 1;
constexpr ll LINF = 5000000000000000LL;
constexpr int MOD = 1000000007;
struct UnionFind {
vi data;
UnionFind(int n = 0) {
data.assign(n, -1);
}
int find(int k) {
if (data[k] < 0) return k;
return data[k] = find(data[k]);
}
bool unite(int x, int y) {
x = find(x), y = find(y);
if (x == y) return false;
if (data[x] > data[y]) swap(x, y);
data[x] += data[y];
data[y] = x;
return true;
}
bool same(int x, int y) { return find(x) == find(y); }
int size(int k) { return -data[find(k)]; }
};
int main() {
int n, a, b;
cin >> n >> a >> b;
vi x(n);
rep(i, n)cin >> x[i];
UnionFind uf(n);
rep(i, n) {
int st = lower_bound(all(x), x[i] + a) - x.begin();
int gl = upper_bound(all(x), x[i] + b) - x.begin();
rep_lr(j, st, gl)uf.unite(i, j);
}
rep(i, n)cout << uf.size(i) << endl;
}
lion_Iob