Submission #669816

#TimeUsernameProblemLanguageResultExecution timeMemory
6698161binRobots (IOI13_robots)C++17
100 / 100
2238 ms24524 KiB
#include <bits/stdc++.h>
#include "robots.h"
using namespace std;

#define all(v) v.begin(), v.end()
const int NMAX = 1e6 + 5;
int A, B, T, X[NMAX], Y[NMAX], W[NMAX], S[NMAX];

int go(int A, int B, int T, int X[], int Y[], int W[], int S[], int m){
    vector<pair<int, int>> v;
    priority_queue<int> pq;
    for(int i = 0; i < T; i++) v.emplace_back(W[i], S[i]);
    sort(all(v));
    
    int ix = 0;
    for(int i = 0; i < A; i++){
        while(ix < T && v[ix].first < X[i]) pq.emplace(v[ix++].second);
        for(int j = 0; j < m; j++){
            if(pq.size()) pq.pop();
            else break;
        }
    }
    while(ix < T) pq.emplace(v[ix++].second);
    for(int i = B - 1; i >= 0; i--){
        for(int j = 0; j < m; j++){
            if(pq.size() && Y[i] > pq.top()) pq.pop();
            else break;
        }
    }
    return pq.empty();
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]){
    int l = 1, r = T + 1, m;
    sort(X, X + A);
    sort(Y, Y + B);
    while(l < r){
        m = (l + r) / 2;
        if(go(A, B, T, X, Y, W, S, m)) r = m;
        else l = m + 1;
    }
    return l == T + 1 ? -1 : r;
}

/*
int main(void){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    cin >> A >> B >> T;
    for(int i = 0; i < A; i++) cin >> X[i];
    for(int i = 0; i < B; i++) cin >> Y[i];
    for(int i = 0; i < T; i++) cin >> W[i] >>  S[i];
    cout << putaway(A, B, T, X, Y, W, S);
    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...