제출 #1348835

#제출 시각아이디문제언어결과실행 시간메모리
1348835sash01Robots (IOI13_robots)C++20
0 / 100
2 ms4420 KiB
#include <bits/stdc++.h>
#include "robots.h"
using namespace std;
int a,b,t,x[1048576],y[1048576],w[1048576],s[1048576],used[1048576];
vector <pair <int,int>> v1,v2;
priority_queue <pair <int,int>> q;
bool check(int tx)
{
    memset(used,0,sizeof(used));
    while(!q.empty())q.pop();
    int l=0;
    for(int i=1;i<=a;i++)
    {
        while(l<v1.size()&&v1[l].first<x[i])
        {
            q.push({s[v1[l].second],v1[l].second});
            l++;
        }
        for(int j=0;!q.empty()&&j<tx;j++)
        {
            used[q.top().second]=1;
            q.pop();
        }
    }
    l=0;
    int br=0;
    for(int i=1;i<=b;i++)
    {
        while(l<v2.size()&&v2[l].first<y[i])
        {
            if(!used[v2[l].second])br++;
            l++;
        }
        br=max(0,br-tx);
    }
    return (br==0);
}
int bin()
{
    int l=1,r=t,mid,ans=-1;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(check(mid))
        {
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }
    return ans;
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[])
{
    a=A;
    b=B;
    t=T;
    for(int i=0;i<a;i++)
    {
        x[i+1]=X[i];
    }
    sort(x+1,x+a+1);
    for(int i=0;i<b;i++)
    {
        y[i+1]=Y[i];
    }
    sort(y+1,y+b+1);
    for(int i=0;i<t;i++)
    {
        w[i+1]=W[i];
        s[i+1]=S[i];
        v1.push_back({w[i+1],i+1});
        v2.push_back({s[i+1],i+1});
    }
    sort(v1.begin(),v1.end());
    sort(v2.begin(),v2.end());
    return bin();
}
#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...