This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<P,int> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-8;
const ll mod=1e9+7;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
class Segment_Tree{
private:
int n;
vi num;
vl date;
public:
Segment_Tree(int n_){
n=1;
while(n<n_) n*=2;
num=vi(2*n-1);
date=vl(2*n-1);
}
void Update(int k,ll x){
k+=n-1;
date[k]+=x;
num[k]++;
while(k>0){
k=(k-1)/2;
date[k]=date[k*2+1]+date[k*2+2];
num[k]=num[2*k+1]+num[2*k+2];
}
}
int Query(ll x,int &t,ll &sm){
sm=0;
t=0;
int k=0;
while(k<n-1){
if(sm+date[2*k+1]<=x){
sm+=date[2*k+1];
t+=num[2*k+1];
k=2*k+2;
}
else k=2*k+1;
}
return k-n+1;
}
int Open(int k){return date[k+n-1];}
};
int n;
ll m;
bool f(ll x,ll y,ll X,ll Y){
if(x/y<X/Y) return 1;
if(x/y>X/Y) return 0;
x%=y,X%=Y;
return x*Y<X*y;
}
int main(){
scanf("%d%lld",&n,&m);
vector<pair<pll,int>> a(n);
vp b(n);
map<P,int> mp;
Segment_Tree st(n);
int mxnum=0,I=0,id=-1;
ll resmu=0,resml=1;
pair<pll,int> res={{0,0},-1};
for(int i=0;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
a[i]={{x,y},i};
b[i]={y,i};
}
sort(b.begin(),b.end());
sort(a.begin(),a.end(),[](pair<pll,int> pp,pair<pll,int> qq){
pll p=pp.first,q=qq.first;
return p.first*q.second<q.first*p.second;
});
for(int i=0;i<n;i++) mp[b[i]]=i;
for(int i=0;i<n;i++){
pll p=a[i].first;
ll x=p.first,y=p.second;
st.Update(mp[{y,a[i].second}],y);
ll sm=0;
int num=0;
int k=st.Query(m*y/x,num,sm);
ll smu=sm*x,sml=y;
// cout<<i<<' '<<x<<' '<<y<<' '<<mp[{y,a[i].second}]<<' '<<num<<' '<<sm<<' '<<k<<endl;
if(mxnum<num||mxnum==num&&f(smu,sml,resmu,resml)){
mxnum=num;
resmu=smu;
resml=sml;
I=i,id=k;
}
}
printf("%d\n",mxnum);
// cout<<resmu<<' '<<resml<<endl;
// cout<<id<<endl;
if(mxnum==0) return 0;
for(int i=0;i<=I;i++){
// cout<<a[i].first.first<<' '<<a[i].first.second<<' '<<a[i].second<<endl;
// cout<<mp[{a[i].first.second,a[i].second}]<<endl;
if(mp[{a[i].first.second,a[i].second}]<id) printf("%d\n",a[i].second+1);
}
}
Compilation message (stderr)
hiring.cpp: In function 'int main()':
hiring.cpp:117:27: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
117 | if(mxnum<num||mxnum==num&&f(smu,sml,resmu,resml)){
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
hiring.cpp:95:16: warning: variable 'res' set but not used [-Wunused-but-set-variable]
95 | pair<pll,int> res={{0,0},-1};
| ^~~
hiring.cpp:88:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
88 | scanf("%d%lld",&n,&m);
| ~~~~~^~~~~~~~~~~~~~~~
hiring.cpp:98:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
98 | scanf("%d%d",&x,&y);
| ~~~~~^~~~~~~~~~~~~~
# | 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... |