#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<queue> #define mp make_pair using namespace std; typedef long long lng; typedef pair<int, int> pii; struct seg { int l,r; seg(){} seg(int x,int y){l=x,r=y;} }; int Min(int x,int y){if(x<y) return x;return y;} int Max(int x,int y){if(x>y) return x;return y;} struct rec { seg w,h; int col; rec(){} rec(seg x,seg y,int cc){w=x,h=y,col=cc;} }; bool is_1(seg x,seg y) { return x.l<=y.l?y.l<x.r:x.l<y.r; } bool is_2(rec x,rec y) { return is_1(x.w,y.w)&&is_1(x.h,y.h); } seg seek_insect(seg x,seg y) { return seg(Max(x.l,y.l),Min(x.r,y.r)); } vector<rec> c,now; void f(rec x,rec &y) //x changed { if(is_2(x,y)) { seg w1=seek_insect(x.w,y.w),h1=seek_insect(x.h,y.h); if(w1.l>x.w.l){c.push_back(rec(seg(x.w.l,w1.l),x.h,x.col));} if(w1.r<x.w.r){c.push_back(rec(seg(w1.r,x.w.r),x.h,x.col));} if(h1.l>x.h.l){c.push_back(rec(w1,seg(x.h.l,h1.l),x.col));} if(h1.r<x.h.r){c.push_back(rec(w1,seg(h1.r,x.h.r),x.col));} } else c.push_back(x); }