Submission #1006533

#TimeUsernameProblemLanguageResultExecution timeMemory
1006533huutuanHiring (IOI09_hiring)C++14
60 / 100
266 ms24488 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N=5e5+10;
int n, w, s[N], q[N], mq[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];
      mq[i]=w*q[i]/s[i];
   }
   iota(id, id+n+1, 0);
   sort(id+1, id+n+1, [&](int x, int y){
      return mq[x]>mq[y];
   });
   int ans=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>mq[i]){
            sum-=pq.top();
            pq.pop();
         }
         ans=max(ans, (int)pq.size());
      }
   }
   {
      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>mq[i]){
            sum-=pq.top().first;
            pq.pop();
         }
         if ((int)pq.size()==ans){
            cout << ans << '\n';
            vector<int> v;
            while (pq.size()){
               v.push_back(pq.top().second);
               pq.pop();
            }
            sort(v.begin(), v.end());
            for (int j:v) cout << j << '\n';
            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...