Analysis: Square Overlap by Travis Hance
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <cstdio>
using namespace std;
int main() {
freopen("squares.in", "r", stdin);
freopen("squares.out", "w", stdout);
int N, K; cin >> N >> K;
vector<pair<int, int> > S;
for(int i = 0; i < N; i++) {
int x, y; cin >> x >> y;
S.push_back(make_pair(x, y));
}
sort(S.begin(), S.end());
set<pair<int, int> > st;
vector<pair<int, int> > res;
set<pair<int, int> >::iterator ita, itb;
for(int i = 0, j = 0; i < S.size() && res.size() < 2; i++) {
for(; S[j].first + K <= S[i].first; j++) {
st.erase(make_pair(S[j].second, j));
}
ita = itb = st.insert(make_pair(S[i].second, i)).first;
if(ita-- != st.begin() && S[i].second < ita->first + K) {
res.push_back(make_pair(i, ita->second));
}
if(++itb != st.end() && itb->first < S[i].second + K) {
res.push_back(make_pair(i, itb->second));
}
}
long long result = 0;
if(res.size() > 1) {
result = -1;
} else if(res.size() == 1) {
int dx = S[res[0].first].first - S[res[0].second].first;
int dy = S[res[0].first].second - S[res[0].second].second;
if(dx < 0) dx = -dx;
if(dy < 0) dy = -dy;
result = 1ll * (K - dx) * (K - dy);
}
cout << result << endl;
}