1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| #include <bits/stdc++.h> using namespace std; int n; int ans[2][4]; int query(int x1, int y1, int x2, int y2) { int tmp; printf("? %d %d %d %d\n", x1, y1, x2, y2); fflush(stdout); scanf("%d", &tmp); return tmp; } int lr() { int l = 1, r = n; int x, y; while(l + 1 < r) { int mid = (l + r) >> 1; x = query(1, 1, mid, n); y = query(mid + 1, 1, n, n); if(!x && !y) return 0; if(x && !y) r = mid; else if(!x && y) l = mid + 1; else if(x && y) return mid; } x = query(1, 1, l, n); y = query(r, 1, n, n); if(x == 1 && y == 1) return l; else return 0; } int ud() { int l = 1, r = n; int x, y; while(l + 1 < r) { int mid = (l + r) >> 1; x = query(1, 1, n, mid); y = query(1, mid + 1, n, n); if(!x && !y) return 0; if(x && !y) r = mid; else if(!x && y) l = mid + 1; else if(x && y) return mid; } x = query(1, 1, n, l); y = query(1, r, n, n); if(x == 1 && y == 1) return l; else return 0; } void queryRec(int id, int x1, int y1, int x2, int y2) { int x; int l = x1, r = x2; while(l < r) { int mid = (l + r) >> 1; x = query(x1, y1, mid, y2); if(x) r = mid; else l = mid + 1; } ans[id][2] = l;
l = x1, r = x2; while(l < r) { int mid = ((l + r) & 1) ? ((l + r) >> 1) + 1 : ((l + r) >> 1); x = query(mid, y1, x2, y2); if(x) l = mid; else r = mid - 1; } ans[id][0] = r;
l = y1, r = y2; while(l < r) { int mid = (l + r) >> 1; x = query(x1, y1, x2, mid); if(x) r = mid; else l = mid + 1; } ans[id][3] = l;
l = y1, r = y2; while(l < r) { int mid = ((l + r) & 1) ? ((l + r) >> 1) + 1 : ((l + r) >> 1); x = query(x1, mid, x2, y2); if(x) l = mid; else r = mid - 1; } ans[id][1] = r; } int main() { scanf("%d", &n); int u = lr(); if(u) { queryRec(0, 1, 1, u, n); queryRec(1, u + 1, 1, n, n); } else { u = ud(); queryRec(0, 1, u + 1, n, n); queryRec(1, 1, 1, n, u); } printf("!"); for (int i = 0; i <= 1; ++i) { for (int j = 0; j <= 3; ++j) printf(" %d", ans[i][j]); } printf("\n"); fflush(stdout); return 0; }
|