//デバッグ用オプション:-fsanitize=undefined,address //コンパイラ最適化 #pragma GCC optimize("Ofast") //インクルードなど #include using namespace std; typedef long long ll; //マクロ //forループ //引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか //Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる //FORAは範囲for文(使いにくかったら消す) #define REP(i,n) for(ll i=0;i=0;i--) #define FOR(i,a,b) for(ll i=a;i<=ll(b);i++) #define FORD(i,a,b) for(ll i=a;i>=ll(b);i--) #define FORA(i,I) for(const auto& i:I) //xにはvectorなどのコンテナ #define ALL(x) x.begin(),x.end() #define SIZE(x) ll(x.size()) //定数 #define INF 1000000000000 //10^12:∞ #define MOD 1000000007 //10^9+7:合同式の法 #define MAXR 100000 //10^5:配列の最大のrange //略記 #define PB push_back //挿入 #define MP make_pair //pairのコンストラクタ #define F first //pairの一つ目の要素 #define S second //pairの二つ目の要素 //以下、素集合と木は同じものを表す class UnionFind { public: vector parent; //parent[i]はiの親 vector siz; //素集合のサイズを表す配列(1で初期化) map> group;//素集合ごとに管理する連想配列(keyはそれぞれの素集合の親、valueはその素集合の要素の配列) //コンストラクタの:の後ろでメンバ変数を初期化 UnionFind(ll n):parent(n),siz(n,1){ //最初は全ての要素の根はそれ自身であるとして初期化 for(ll i=0;i x; ll upper_b(ll key){ ll l,r;l=0;r=n; while(l+1>n>>a>>b; x.resize(n); REP(i,n)cin>>x[i]; UnionFind u(n); //チェックしすぎない REP(i,n){ ll now=upper_b(x[i]+b); //ここかな while(now>=0){ if(x[now]