#include "bits/stdc++.h" using namespace std; #define int long long using i64 = long long; #define REP(i, n) for (int i = 0; i < (int)n; ++i) #define RREP(i, n) for (int i = (int)n - 1; i >= 0; --i) #define FOR(i, s, n) for (int i = s; i < (int)n; ++i) #define RFOR(i, s, n) for (int i = (int)n - 1; i >= s; --i) #define ALL(a) a.begin(), a.end() #define IN(a, x, b) (a <= x && x < b) templateinline void out(T t){cout << t << "\n";} templateinline void out(T t,Ts... ts){cout << t << " ";out(ts...);} templateinline bool CHMIN(T&a,T b){if(a > b){a = b;return true;}return false;} templateinline bool CHMAX(T&a,T b){if(a < b){a = b;return true;}return false;} constexpr int INF = 1e18; signed main() { i64 N; cin >> N; vectorxa(N), ya(N), xb(N), yb(N); REP(i, N) { cin >> xa[i] >> ya[i] >> xb[i] >> yb[i]; } vector ans(N); auto func = [&](vector&x, vector&y) -> void { set>st; st.insert({INF, 0}); st.insert({0, INF}); REP(i, N) { vector>tmp; auto itr = st.upper_bound({x[i], -INF}); while(1){ tmp.emplace_back(*itr); --itr; if(tmp.back().second >= y[i])break; } REP(j,tmp.size())st.erase(tmp[j]); int t = tmp[0].first; tmp[0].first = x[i]; i64 sum = 0; REP(j, tmp.size() - 1) { //out(i,tmp[j].first,tmp[j + 1].first,tmp[j].second); ans[i] += (tmp[j].first - tmp[j + 1].first) * (y[i] - tmp[j].second); } tmp[0].first = t; if(tmp.size() == 1)st.insert(tmp[0]); else{ if(tmp[0].first != x[i])st.insert(tmp[0]); st.insert({x[i],y[i]}); st.insert(tmp.back()); } } }; vector>x(4,vector(N)),y(4,vector(N)); REP(i, N) { x[0][i] = -xa[i], y[0][i] = -ya[i]; x[1][i] = -xa[i], y[1][i] = yb[i]; x[2][i] = xb[i], y[2][i] = -ya[i]; x[3][i] = xb[i], y[3][i] = yb[i]; } //func(x[3], y[3]); REP(i, 4) func(x[i], y[i]); REP(i, N) cout << ans[i] << endl; }