Submission #1006645

#TimeUsernameProblemLanguageResultExecution timeMemory
1006645huutuanHiring (IOI09_hiring)C++14
100 / 100
216 ms20136 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N=5e5+10;
int n, w, s[N], q[N], id[N];

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> w;
   for (int i=1; i<=n; ++i){
      cin >> s[i] >> q[i];
   }
   iota(id, id+n+1, 0);
   sort(id+1, id+n+1, [&](int x, int y){
      return s[x]*q[y]<s[y]*q[x];
   });
   pair<int, pair<double, int>> ans={0, {0, 0}};
   {
      priority_queue<int> pq; int sum=0;
      for (int _i=1; _i<=n; ++_i){
         int i=id[_i];
         pq.push(q[i]); sum+=q[i];
         while (sum>w*q[i]/s[i]){
            sum-=pq.top();
            pq.pop();
         }
         ans=max(ans, {(int)pq.size(), {-sum*s[i]/q[i], i}});
      }
   }
   cout << ans.first << '\n';
   w=w*q[ans.second.second]/s[ans.second.second];
   {
      priority_queue<pair<int, int>> pq; int sum=0;
      for (int _i=1; _i<=n; ++_i){
         int i=id[_i];
         pq.emplace(q[i], i); sum+=q[i];
         while (sum>w){
            sum-=pq.top().first;
            pq.pop();
         }
         if (ans.first==(int)pq.size() && ans.second.second==i){
            while (pq.size()){
               cout << pq.top().second << '\n';
               pq.pop();
            }
            return 0;
         }
      }
   }
   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...