This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define endl '\n'
llo n,w;
llo aa[500001];
llo bb[500001];
llo ind[500001];
bool cmp(pair<pair<llo,llo>,llo> cc,pair<pair<llo,llo>,llo> dd){
	return cc.a.a*dd.a.b<cc.a.b*dd.a.a;
}
llo tree[500001];
void u(llo i,llo j){
	while(i<=n){
		tree[i]+=j;
		i+=(i&-i);
	}
}
llo s(llo i){
	llo su=0;
	while(i>0){
		su+=tree[i];
		i-=(i&-i);
	}
	return su;
}
llo tree2[500001];
void u2(llo i,llo j){
	while(i<=n){
		tree2[i]+=j;
		i+=(i&-i);
	}
}
llo s2(llo i){
	llo su=0;
	while(i>0){
		su+=tree2[i];
		i-=(i&-i);
	}
	return su;
}
pair<llo,pair<llo,llo>> ans={0,{0,1}};
llo ma=0;
llo cot=0;
void remax(pair<llo,pair<llo,llo>> cc){
	if(cc.a>ans.a){
		ans=cc;
		ma=cot;
	}
	else if(cc.a==ans.a){
		if(cc.b.a*ans.b.b<cc.b.b*ans.b.a){
			ans=cc;
			ma=cot;
		}
	}
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>w;
	vector<pair<pair<llo,llo>,llo>> ss;
	vector<pair<llo,llo>> tt;
	for(llo i=0;i<n;i++){
		cin>>aa[i]>>bb[i];
		ss.pb({{aa[i],bb[i]},i});
		tt.pb({bb[i],i});
	}
	
	sort(ss.begin(),ss.end(),cmp);
	sort(tt.begin(),tt.end());
	for(llo i=0;i<n;i++){
		ind[tt[i].b]=i;
	}
	for(auto j:ss){
		cot++;
		u(ind[j.b]+1,j.a.b);
		u2(ind[j.b]+1,1);
		llo cur=0;
		llo cur2=0;
		//cout<<j.a.a<<"::"<<j.a.b<<endl;
		for(llo i=19;i>=0;i--){
			if(cur+(1<<i)<=n){
				if((cur2+tree[cur+(1<<i)])*j.a.a<=w*j.a.b){
					cur+=(1<<i);
					cur2+=tree[cur];
				}
			}
		}
	//	cout<<s2(cur)<<",,"<<cur<<",,"<<cur2<<endl;
		remax({s2(cur),{cur2*j.a.a,j.a.b}});
	}
	//cout<<ans.a<<" "<<ans.b.a<<","<<ans.b.b<<endl;
	cout<<ans.a<<endl;
	if(ans.a>0){
		vector<pair<llo,llo>> kk;
		for(llo i=0;i<ma;i++){
			kk.pb({ss[i].a.b,ss[i].b});
		}
		sort(kk.begin(),kk.end());
		for(llo i=0;i<ans.a;i++){
			cout<<kk[i].b+1<<endl;
		}
	}
 
 
	return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |