Submission #993573

#TimeUsernameProblemLanguageResultExecution timeMemory
993573Muaath_5Robots (IOI13_robots)C++17
53 / 100
1277 ms12944 KiB
    //#pragma GCC optimize("Ofast,O3,unroll-loops")
    //#pragma GCC target("avx2,avx,sse3,sse4")
    #include "robots.h"
    #include <bits/stdc++.h>
    using namespace std;
     
    int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
        if (A > B) {
            swap(A, B);
            swap(X, Y);
            swap(W, S);
        }
        sort(X, X+A);
        sort(Y, Y+B);
        vector<pair<int, int>> v;
        for (int i = 0; i < T; i++)
            v.push_back({W[i], S[i]});
        sort(v.begin(), v.end());
        for (int i = 0; i < T; i++) {
            W[i] = v[i].first, S[i] = v[i].second;
            
            if (A && B) if (W[i] >= X[A-1] && S[i] >= Y[B-1])
                return -1;
            if (A && !B) if (W[i] >= X[A-1])
                return -1;
            if (!A && B) if (S[i] >= Y[B-1])
                return -1;
        }
     
        int l = 1, r = T;
        while (l < r) {
            const int mid = (l+r)/2;
            bool ok = true;
     
            int idx = 0;
            priority_queue<int> pq;
            for (int i = 0; idx < T && i < A; i++) {
                while (idx < T && W[idx] < X[i]) {
                    pq.push(S[idx]);
                    idx++;
                }
                for (int j = 0; pq.size() && j < mid; j++)
                    pq.pop();
            }
            while (idx < T) {
                pq.push(S[idx]);
                idx++;
            }
            
            for (int i = B-1; ok && pq.size() && i >= 0; i--) {
                for (int j = 0; ok && pq.size() && j < mid; j++) {
                    if (pq.top() >= Y[i]) {
                        ok = false;
                        break;
                    }
                    pq.pop();
                }
            }
     
            if (pq.empty())
                r = mid;
            else
                l = mid+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...