提交记录
#include<iostream>
#include<set>
using namespace std;
int n,m;
long long ans;
struct node{int xa,ya,xb,yb;};
bool operator<(const node &x,const node &y)
{
if(x.xb<=y.xa)return 1;
else if(y.xb<=x.xa)return 0;
if(x.yb<=y.ya)return 1;
else if(y.yb<=x.ya)return 0;
return 0;
}
multiset<node>s;
int main()
{
cin>>n>>m;
m/=2;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
int xa=x-m,ya=y-m,xb=x+m,yb=y+m;
auto p=s.find({xa,ya,xb,yb});
if(p!=s.end())
{
if(ans)
{
cout<<-1<<endl;
return 0;
}
int xc=p->xa,yc=p->ya,xd=p->xb,yd=p->yb;
s.erase(p);
if(s.find({xa,ya,xb,yb})!=s.end())
{
cout<<-1<<endl;
return 0;
}
s.insert({xc,yc,xd,yd});
ans=1ll*min(xb-xc,xd-xa)*min(yb-yc,yd-ya);
}
s.insert({x-m,y-m,x+m,y+m});
}
cout<<ans<<endl;
return 0;
}