Submission #1360706

#TimeUsernameProblemLanguageResultExecution timeMemory
1360706pcheloveksRobots (IOI13_robots)C++20
76 / 100
3096 ms37784 KiB
#include "robots.h"

#include <bits/stdc++.h>

using namespace std;

struct event {
    int pos, type, num;
};

bool cmp(event e1, event e2) {
    if(e1.pos != e2.pos) return e1.pos < e2.pos;
    return e1.type < e2.type;   
}

bool tryPut(int cnt, int a, int b, int t, int x[], int y[], int w[], int s[]) {
    vector < event > E; 

    for(int i = 0; i < a; i++) E.push_back( { x[i], 0, i } );
    for(int i = 0; i < t; i++) {
        E.push_back( { w[i], 1, i } );
    }

    sort(E.begin(), E.end(), cmp);

    set < pair < int, int > > toys;
    for(auto q: E) {
        if(q.type == 0) {
            for(int i = 0; toys.size() > 0 && i < cnt; i++) {
                toys.erase(toys.find(*toys.rbegin()));
            }
        } 
        else {
            toys.insert( { s[q.num], q.num } );
        }
    }

    E.clear();

    for(int i = 0; i < b; i++) E.push_back( { y[i], 0, i } );
    for(auto x: toys) {
        int i = x.second;
        E.push_back( { s[i], 1, i } );
    }

    sort(E.begin(), E.end(), cmp);
    toys.clear();

    for(auto q: E) {
        if(q.type == 0) {
            for(int i = 0; toys.size() > 0 && i < cnt; i++) {
                toys.erase(toys.find(*toys.rbegin()));
            }
        } 
        else {
            toys.insert( { w[q.num], q.num } );
        }
    }

    return (toys.size() == 0);
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    int L = 0, R = T + 1;
    while(R - L > 1) {
        int mid = (L + R) >> 1;
        if(tryPut(mid, A, B, T, X, Y, W, S)) R = mid;
        else L = mid;
    }
    if(R == T + 1) return -1;
    return R;
}
#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...