#include using namespace std; #define FOR(a,b,c) for(int a = b; a < c; a++) #define all(a) (a).begin(),(a).end() struct Prze { int y1,y2,id; Prze(int _y1, int _y2,int _id):y1(_y1),y2(_y2),id(_id){} bool operator<(const Prze &o)const { return y1 < o.y1; } bool operator<=(const Prze &o)const { return y1 <= o.y1; } }; const int N = 2e5 + 7; int grupa[N]; int Find(int a) { if(grupa[a] == a)return a; return grupa[a] = Find(grupa[a]); } void Union(int a,int b) { a = Find(a); b = Find(b); grupa[a] = b; } set S[55]; void merge2(int x,int y1,int y2,int id) { auto p = S[x].upper_bound({y1,0,0}); p--; auto k = S[x].upper_bound({y2,0,0}); k--; ++k; for(auto i = p; i != k; i++) { if(i->id != 0) { Union(id,i->id); } } } void merge(int x,int y1,int y2,int id) { auto p = S[x].upper_bound({y1,0,0}); p--; auto k = S[x].upper_bound({y2,0,0}); k--; //cout << "pocz : " << p->y1 << " " << p->y2 << " kon : " << p->y1 << " " << p->y2 << "\n"; int yl = p->y1; int yp = k->y2; int idL = p->id; int idP = k->id; ++k; for(auto i = p; i != k; i++) { if(i->id != 0) { Union(id,i->id); } } while(p != k) { auto t =p; ++t; S[x].erase(p); p = t; } if(yl != y1 and idL == 0) S[x].insert({yl,y1 - 1,0}); else y1 = yl; if(yp != y2 and idP == 0) S[x].insert({y2 + 1,yp,0}); else y2 = yp; int GR = id; S[x].insert({y1,y2,GR}); int Yl = y1, Yp = y2; p = S[x].find({Yl,Yp,GR}); if(p != S[x].begin()) { auto poL = p;poL--; if(poL->id != 0) { Union(poL->id,id); int nyl = poL->y1; S[x].erase({Yl,Yp,GR}); S[x].erase(poL); Yl = nyl; S[x].insert({Yl,Yp,GR}); } } p = S[x].find({Yl,Yp,GR}); auto poP = p;poP++; if(poP != S[x].end()) { if(poP->id != 0) { int nyP = poP->y2; S[x].erase({Yl,Yp,GR}); S[x].erase(poP); Yp = nyP; S[x].insert({Yl,Yp,GR}); } } } int getId(int x,int y) { auto p = S[x].upper_bound({y,0,0}); p--; return Find(p->id); } int main() { ios_base::sync_with_stdio(0); FOR(i,0,N)grupa[i] = i; FOR(x,0,55) { S[x].insert({1,(int)1e9,0}); } int L; cin >> L; int curId = 1; while(L--) { int t, x1, y1, x2, y2; cin >> t >> x1 >> y1 >> x2 >> y2; if(t == 0) { merge2(x1 - 1,y1,y2,curId); FOR(x,x1,x2 + 1)merge(x,y1,y2,curId); merge2(x2 + 1,y1,y2,curId); curId++; } else { int a = getId(x1,y1); int b = getId(x2,y2); cout << (a == b and a != 0) << "\n"; } } return 0; }