Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #define mini(x, y) x < y ? x : y
- using namespace std;
- long long n, x[100000 + 10], y[100000 + 10];
- int el[100000 + 10];
- void res() {
- for(int i = 1; i <= n; i++) {
- el[i] = 0;
- }
- }
- void res1() {
- for(int i = 1; i <= n; i++) {
- if(el[i] == 2) {
- el[i] = 0;
- }
- }
- }
- void read() {
- for(int i = 1; i <= n; i++) {
- cin >> x[i] >> y[i];
- }
- }
- void eli(long long x1, long long x2, long long y1, long long y2) {
- for(int i = 1; i <= n; i++) {
- if(x[i] >= x1 && x[i] <= x2 && y[i] >= y1 && y[i] <= y2) {
- el[i] = 1;
- }
- }
- }
- void eli1(long long x1, long long x2, long long y1, long long y2) {
- for(int i = 1; i <= n; i++) {
- if(x[i] >= x1 && x[i] <= x2 && y[i] >= y1 && y[i] <= y2) {
- el[i] = 2;
- }
- }
- }
- bool ver1(long long lu) {
- long long co = 0;
- long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
- for(int i = 1; i <= n; i++) {
- if(el[i] == 0) {
- co++;
- maxx = max(maxx, x[i]);
- maxy = max(maxy, y[i]);
- minx = mini(minx, x[i]);
- miny = mini(miny, y[i]);
- }
- }
- if(co == 0) {
- return true;
- }
- if(maxx - minx <= lu && maxy - miny <= lu) {
- return true;
- }
- return false;
- }
- bool ver2(int lu) {
- int co = 0;
- long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
- for(int i = 1; i <= n; i++) {
- if(el[i] == 0) {
- co++;
- maxx = max(maxx, x[i]);
- maxy = max(maxy, y[i]);
- minx = mini(minx, x[i]);
- miny = mini(miny, y[i]);
- }
- }
- if(co == 0) {
- return true;
- }
- eli1(minx, minx + lu, miny, miny + lu);
- if(ver1(lu)) {
- return true;
- }
- res1();
- eli1(minx, minx + lu, maxy - lu, maxy);
- if(ver1(lu)) {
- return true;
- }
- res1();
- eli1(maxx - lu, maxx, miny, miny + lu);
- if(ver1(lu)) {
- return true;
- }
- res1();
- eli1(maxx - lu, maxx, maxy - lu, maxy);
- if(ver1(lu)) {
- return true;
- }
- return false;
- }
- bool ver3(long long lu) {
- int co = 0;
- res();
- long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
- for(int i = 1; i <= n; i++) {
- if(el[i] == 0) {
- co++;
- maxx = max(maxx, x[i]);
- maxy = max(maxy, y[i]);
- minx = mini(minx, x[i]);
- miny = mini(miny, y[i]);
- }
- }
- if(co == 0) {
- return true;
- }
- eli(minx, minx + lu, miny, miny + lu);
- if(ver2(lu)) {
- return true;
- }
- res();
- eli(minx, minx + lu, maxy - lu, maxy);
- if(ver2(lu)) {
- return true;
- }
- res();
- eli(maxx - lu, maxx, miny, miny + lu);
- if(ver2(lu)) {
- return true;
- }
- res();
- eli(maxx - lu, maxx, maxy - lu, maxy);
- if(ver2(lu)) {
- return true;
- }
- return false;
- }
- int searc() {
- long long st = 0, dr = (long long)1e9 + 1;
- while(st < dr) {
- long long mid = (st + dr) / 2;
- if(ver3(mid)) {
- dr = mid;
- } else {
- st = mid + 1;
- }
- }
- return st;
- }
- int main()
- {
- while(cin >> n) {
- read();
- cout << searc() << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement