Submission #1259637

#TimeUsernameProblemLanguageResultExecution timeMemory
1259637comgaTramAnhRobots (IOI13_robots)C++20
90 / 100
3038 ms15184 KiB
#include <bits/stdc++.h>
#include "robots.h"
using namespace std; 
long long inf = 2000000000000007LL; 

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
//int putaway(int A, int B, int T, vector <int> X, vector <int> Y, vector <int> W, vector <int> S) {
  vector <pair <int, int>> save; 
  for (int i = 0; i < T; i++) {
    save.push_back(make_pair(W[i], S[i])); 
  }
  sort(save.begin(), save.end()); 
  long long ans = -1;
  long long lo = 1, hi = inf;  
  while (lo <= hi) {
    long long mid = (lo + hi) / 2; 
    set <pair <int, int>> myset; 
    for (int i = 0; i < B; i++) {
      myset.insert(make_pair(Y[i], i)); 
    }
    vector <long long> numbWeak(A, 0), numbSmall(B, 0); 
    vector <int> notChoose;
    for (int i = T - 1; i >= 0; i--) {
      set <pair <int, int>>::iterator it = myset.lower_bound(make_pair(save[i].second, B + 10));
      if (it != myset.end()) {
        numbSmall[(*it).second]++; 
        if (numbSmall[(*it).second] == mid) {
          myset.erase(it); 
        }
      }
      else {
        //cout << i << endl;
        notChoose.push_back(i); 
      } 
    }
   // cout << "-------" << endl;
    myset.clear();
    for (int i = 0; i < A; i++) {
      myset.insert(make_pair(X[i], i)); 
    }
    reverse(notChoose.begin(), notChoose.end());
    vector <int> notChoose2;
    for (int i = (int) notChoose.size() - 1; i >= 0; i--) {
      set <pair <int, int>>::iterator it = myset.lower_bound(make_pair(save[notChoose[i]].first, A + 10));
      if (it != myset.end()) {
        //cout << (*it).second << "     " << mid << endl;
        numbWeak[(*it).second]++; 
        if (numbWeak[(*it).second] == mid) {
          myset.erase(it); 
        }
      }
      else {
        notChoose2.push_back(i); 
      }  
    }
    if (notChoose2.empty() == false) {
      lo = mid + 1; 
    } 
    else {
      ans = mid; 
      hi = mid - 1; 
    }
  }
  return ans;   
}
#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...