Submission #995507

#TimeUsernameProblemLanguageResultExecution timeMemory
995507CSQ31Robots (IOI13_robots)C++17
76 / 100
3046 ms42700 KiB
#include "robots.h"
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef pair<int,int> pii;
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    vector<int>x,y;
    for(int i=0;i<A;i++)x.push_back(X[i]);
    for(int i=0;i<B;i++)y.push_back(Y[i]);
    sort(x.begin(),x.end());
    sort(y.begin(),y.end());

    vector<pii>pt(T);
    for(int i=0;i<T;i++)pt[i] = {W[i],S[i]};
    sort(pt.begin(),pt.end());

    int l = 1,r = T;
    while(r>=l){
        int mid = (l+r)/2;
        multiset<int,greater<int>>lft;
        int p = 0;
        for(int i=0;i<A;i++){
            while(p<T && pt[p].fi < x[i]){
                lft.insert(pt[p].se);
                p++;
            }
            for(int j=0;j<mid;j++){
                if(lft.empty())break;
                lft.erase(lft.begin());
            }
        }
        while(p!=T){
            lft.insert(pt[p].se);
            p++;
        }
        //cout<<mid<<" "<<lft.size()<<'\n';
        for(int i=B-1;i>=0;i--){
            for(int j=0;j<mid;j++){
                if(lft.empty())break;
                if(*lft.begin() >= y[i])break;
                lft.erase(lft.begin());
            }
        }
        
        if(lft.empty())r = mid-1;
        else l = mid+1;
    }
    if(l == T+1)return -1;
    return l;
}
#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...