#include "robots.h"
#include <queue>
#include <algorithm>
using namespace std;
#define MAXT 1000006
#define MAXN 50004
typedef pair<int,int> pii;
static int A,B,T,X[MAXN],Y[MAXN];
static struct TOY{
int w,s;
bool operator < (const TOY &ot)const{
return w < ot.w;
}
} toy[MAXT];
static priority_queue<pii> que;
static int order[MAXT],chk[MAXT];
bool cmp_s(int a,int b){ return toy[a].s<toy[b].s; }
int check(int m)
{
int i,j,k;
for (i=1;i<=T;i++) chk[i] = 0;
while (!que.empty()) que.pop();
for (i=k=1;i<=A;i++){
while (k <= T && toy[k].w < X[i]){
que.push(pii(toy[k].s,k));
k++;
}
for (j=0;j<m&&!que.empty();j++){
chk[que.top().second] = 1;
que.pop();
}
}
for (i=k=1;i<=B;i++){
int cnt=0;
while (k <= T && toy[order[k]].s < Y[i] && cnt < m){
if (!chk[order[k]]) cnt++, chk[order[k]] = 1;
k++;
}
}
for (i=1;i<=T;i++) if (!chk[i]) return 0;
return 1;
}
int putaway(int a,int b,int t,int x[],int y[],int W[],int S[])
{
int i,s,e,m,ans=-1;
A = a, B = b, T = t;
for (i=1;i<=A;i++) X[i] = x[i-1];
for (i=1;i<=B;i++) Y[i] = y[i-1];
for (i=1;i<=T;i++) toy[i].w = W[i-1], toy[i].s = S[i-1], order[i] = i;
sort(X+1,X+A+1), sort(Y+1,Y+B+1);
sort(toy+1,toy+T+1); sort(order+1,order+T+1,cmp_s);
s = 1, e = T;
while (s <= e){
m = (s+e)>>1;
if (check(m)) e = m-1, ans = m;
else s = m+1;
}
return ans;
}
I2luY2x1ZGUgInJvYm90cy5oIgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIE1BWFQgMTAwMDAwNgojZGVmaW5lIE1BWE4gNTAwMDQKdHlwZWRlZiBwYWlyPGludCxpbnQ+IHBpaTsKCnN0YXRpYyBpbnQgQSxCLFQsWFtNQVhOXSxZW01BWE5dOwpzdGF0aWMgc3RydWN0IFRPWXsKICAgIGludCB3LHM7CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IFRPWSAmb3QpY29uc3R7CiAgICAgICAgcmV0dXJuIHcgPCBvdC53OwogICAgfQp9IHRveVtNQVhUXTsKc3RhdGljIHByaW9yaXR5X3F1ZXVlPHBpaT4gcXVlOwpzdGF0aWMgaW50IG9yZGVyW01BWFRdLGNoa1tNQVhUXTsKCmJvb2wgY21wX3MoaW50IGEsaW50IGIpeyByZXR1cm4gdG95W2FdLnM8dG95W2JdLnM7IH0KCmludCBjaGVjayhpbnQgbSkKewogICAgaW50IGksaixrOwogICAgZm9yIChpPTE7aTw9VDtpKyspIGNoa1tpXSA9IDA7CiAgICB3aGlsZSAoIXF1ZS5lbXB0eSgpKSBxdWUucG9wKCk7CiAgICBmb3IgKGk9az0xO2k8PUE7aSsrKXsKICAgICAgICB3aGlsZSAoayA8PSBUICYmIHRveVtrXS53IDwgWFtpXSl7CiAgICAgICAgICAgIHF1ZS5wdXNoKHBpaSh0b3lba10ucyxrKSk7CiAgICAgICAgICAgIGsrKzsKICAgICAgICB9CiAgICAgICAgZm9yIChqPTA7ajxtJiYhcXVlLmVtcHR5KCk7aisrKXsKICAgICAgICAgICAgY2hrW3F1ZS50b3AoKS5zZWNvbmRdID0gMTsKICAgICAgICAgICAgcXVlLnBvcCgpOwogICAgICAgIH0KICAgIH0KICAgIGZvciAoaT1rPTE7aTw9QjtpKyspewogICAgICAgIGludCBjbnQ9MDsKICAgICAgICB3aGlsZSAoayA8PSBUICYmIHRveVtvcmRlcltrXV0ucyA8IFlbaV0gJiYgY250IDwgbSl7CiAgICAgICAgICAgIGlmICghY2hrW29yZGVyW2tdXSkgY250KyssIGNoa1tvcmRlcltrXV0gPSAxOwogICAgICAgICAgICBrKys7CiAgICAgICAgfQogICAgfQogICAgZm9yIChpPTE7aTw9VDtpKyspIGlmICghY2hrW2ldKSByZXR1cm4gMDsKICAgIHJldHVybiAxOwp9CgppbnQgcHV0YXdheShpbnQgYSxpbnQgYixpbnQgdCxpbnQgeFtdLGludCB5W10saW50IFdbXSxpbnQgU1tdKQp7CiAgICBpbnQgaSxzLGUsbSxhbnM9LTE7CiAgICBBID0gYSwgQiA9IGIsIFQgPSB0OwogICAgZm9yIChpPTE7aTw9QTtpKyspIFhbaV0gPSB4W2ktMV07CiAgICBmb3IgKGk9MTtpPD1CO2krKykgWVtpXSA9IHlbaS0xXTsKICAgIGZvciAoaT0xO2k8PVQ7aSsrKSB0b3lbaV0udyA9IFdbaS0xXSwgdG95W2ldLnMgPSBTW2ktMV0sIG9yZGVyW2ldID0gaTsKICAgIHNvcnQoWCsxLFgrQSsxKSwgc29ydChZKzEsWStCKzEpOwogICAgc29ydCh0b3krMSx0b3krVCsxKTsgc29ydChvcmRlcisxLG9yZGVyK1QrMSxjbXBfcyk7CiAgICBzID0gMSwgZSA9IFQ7CiAgICB3aGlsZSAocyA8PSBlKXsKICAgICAgICBtID0gKHMrZSk+PjE7CiAgICAgICAgaWYgKGNoZWNrKG0pKSBlID0gbS0xLCBhbnMgPSBtOwogICAgICAgIGVsc2UgcyA9IG0rMTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0K