#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const ll N = 4011;
ll z[N][N],u[N][N],v[N][N],w[N][N];
ll n;
ll a,b,g,k;
ll x,y;
void init(ll a,ll b,ll g,ll k,ll n)
{
if(a < N)
{
if(b < N)
{
for(int j = b,l = 0;l < k;l++,j++)
{
for(int i = a,m = 0;m < g;m++,i++)
{
z[i][j] = n;
}
}
}
else if(b >= N)
{
b -= N;
for(int j = b,l = 0;l < k;l++,j++)
{
for(int i = a,m = 0;m < g;m++,i++)
{
u[i][j] = n;
}
}
}
}
else if(a >= N)
{
if(b < N)
{
a -= N;
for(int j = b,l = 0;l < k;l++,j++)
{
for(int i = a,m = 0;m < g;m++,i++)
{
w[i][j] = n;
}
}
}
else if(b >= N)
{
a -= N;
b -= N;
for(int j = b,l = 0;l < k;l++,j++)
{
for(int i = a,m = 0;m < g;m++,i++)
{
v[i][j] = n;
}
}
}
}
}
int query(int x,int y)
{
if(x < N)
{
if(y < N)
{
return z[x][y];
}
else if(y >= N)
{
y -= N;
return u[x][y];
}
}
else if(x >= N)
{
if(y < N)
{
x -= N;
return w[x][y];
}
else if(y >= N)
{
x -= N;
y -= N;
return v[x][y];
}
}
}
int main()
{
memset(z,-1,sizeof z);
memset(u,-1,sizeof u);
memset(v,-1,sizeof v);
memset(w,-1,sizeof w);
cin >> n;
for(ll i = 0;i < n;i++)
{
cin >> a >> b >> g >> k;
init(a,b,g,k,i+1);
}
cin >> x >> y;
/*
for(int i = 1;i <= 10;i++)
{
for(int j = 1;j <= 10;j++)
cout<<z[i][j]<<" ";
cout<<endl;
}
*/
cout<<query(x,y);
return 0;
}
测试点全部MLE
思路:
