제출 #1155627

#제출 시각아이디문제언어결과실행 시간메모리
1155627alexdd로봇 (IOI13_robots)C++20
76 / 100
3096 ms11840 KiB
#include "robots.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> r1,r2;
vector<pair<int,int>> v;
bool verif(int cnt)
{
    int poz=-1;
    priority_queue<int> pq;
    for(int x:r1)
    {
        while(poz+1<v.size() && v[poz+1].first < x)
        {
            poz++;
            pq.push(v[poz].second);
        }
        for(int pas=0;pas<cnt;pas++)
            if(!pq.empty())
                pq.pop();
    }
    while(poz+1 < v.size())
    {
        poz++;
        pq.push(v[poz].second);
    }
    for(int x:r2)
    {
        if(pq.empty())
            break;
        if(pq.top() >= x)
            break;
        for(int pas=0;pas<cnt;pas++)
            if(!pq.empty())
                pq.pop();
    }
    return pq.empty();
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[])
{
    for(int i=0;i<A;i++)
        r1.push_back(X[i]);
    for(int i=0;i<B;i++)
        r2.push_back(Y[i]);
    for(int i=0;i<T;i++)
        v.push_back({W[i],S[i]});
    sort(r1.begin(),r1.end());
    sort(r2.begin(),r2.end());
    reverse(r2.begin(),r2.end());
    sort(v.begin(),v.end());
    int st=0,dr=T,ans=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(verif(mij))
        {
            ans = mij;
            dr = mij-1;
        }
        else
            st = mij+1;
    }
    return ans;
}
#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...