Submission #598555

#TimeUsernameProblemLanguageResultExecution timeMemory
598555Jarif_RahmanRobots (IOI13_robots)C++17
76 / 100
661 ms19400 KiB
#include "robots.h"
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define sc second
using namespace std;
typedef long long int ll;
typedef string str;

int putaway(int A, int B, int n, int X[], int Y[], int W[], int S[]){
    sort(X, X+A);
    sort(Y, Y+B);

    for(int i = 0; i < n; i++) if(W[i] >= X[A-1] && S[i] >= Y[B-1]) return -1;

    vector<int> bs(n);
    for(int i = 0; i < n; i++) bs[i] = i;
    sort(bs.begin(), bs.end(), [&](int a, int b){
        return S[a] < S[b];
    });

    vector<int> nxt(n);
    for(int i = 0; i < n; i++){
        nxt[i] = upper_bound(X, X+A, W[i])-X;
    }

    function<bool(int)> check = [&](int m){
        vector<bool> marked(n, 0);
        vector<int> space(A, m);
        set<int> available;
        for(int i = 0; i < A; i++) available.insert(i);

        for(int i = n-1; i >= 0; i--){
            int x = bs[i], y = nxt[x];
            if(y == A) continue;
            if(space[y]){
                space[y]--, marked[x] = 1;
                if(!space[y]) available.erase(y);
            }
            else{
                auto it = available.lower_bound(y);
                if(it == available.end()) continue;
                space[*it]--, marked[x] = 1;
                if(!space[*it]) available.erase(it);
            }
        }

        int c = m, ls = B-1;

        for(int i = n-1; i >= 0; i--){
            if(marked[bs[i]]) continue;
            if(S[bs[i]] >= Y[ls]) return 0;
            c--;
            if(!c) c = m, ls--;
        }

        return 1;
    };

    int a = 1, b = n;

    while(a < b){
        int md = (a+b)/2;
        if(check(md)) b = md;
        else a = md+1;
    }

    return a;
}
#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...