結果
問題 | No.1170 Never Want to Walk |
ユーザー |
![]() |
提出日時 | 2020-08-14 22:01:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,096 bytes |
コンパイル時間 | 2,104 ms |
コンパイル使用メモリ | 172,472 KB |
実行使用メモリ | 10,496 KB |
最終ジャッジ日時 | 2024-10-10 15:17:12 |
合計ジャッジ時間 | 6,508 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 TLE * 1 -- * 6 |
ソースコード
//#define _GLIBCXX_DEBUG#include <bits/stdc++.h>#define FOR(i,a,b) for(int i=a;i<b;i++)#define rep(i,n) FOR(i,0,n)#define ROF(i,a,b) for(int i=a;i>=b;i--)#define per(i,a) ROF(i,a,0)#define pb push_backusing namespace std;using ll=long long;using ld=long double;using ch=char;typedef pair<ll,ll> P;typedef vector<ll> vl;typedef vector<vl> vvl;typedef vector<P> vP;typedef vector<ch> vc;typedef vector<vc> vvc;const ll MOD=1000000007;const ll MOD2=998244353;const ld PI=acos(-1);const ll INF=1e18;struct edge{ll to,cost;};struct edge2{ll from,to,cost;};template <typename T>bool chmax(T &a, const T& b) {if (a < b) {a = b;return true;}return false;}template <typename T>bool chmin(T &a, const T& b) {if (a > b) {a = b;return true;}return false;}//union_find(親par,深さrnk)const int MXV=200000;int par[MXV],rnk[MXV],siz[MXV];void union_init(int n){for(int i=0;i<n;i++){par[i]=i;rnk[i]=0;siz[i]=1;}}//根を探すint find(int x){if(par[x]==x){return x;}else{return par[x]=find(par[x]);}}void unite(int x,int y){x=find(x);y=find(y);if(x==y){return;}if(rnk[x]<rnk[y]){par[x]=y;siz[y]+=siz[x];siz[x]=0;}else{par[y]=x;siz[x]+=siz[y];siz[y]=0;if(rnk[x]==rnk[y]){rnk[x]++;}}}//集合が同じかbool same(int x,int y){return find(x)==find(y);}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int N,A,B;cin >> N >> A >> B;union_init(N);vl X(N);set<int> st;rep(i,N){cin >> X[i];}X.pb(INF);rep(i,N){auto itr1=lower_bound(X.begin(),X.end(),X[i]+A);while(*itr1<=X[i]+B){unite(i,itr1-X.begin());itr1++;}}rep(i,N){cout << siz[find(i)] << '\n';}}/*overflow checked?corner case checked?boundary checked?not TLE in worst case checked?*/