This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub ei1333/library
#include "structure/others/union-rectangle.hpp"
template< typename T > struct UnionRectangle { map< T, T > data; int64 sum; UnionRectangle() : sum(0) { const T INF = numeric_limits< T >::max(); data[0] = INF; data[INF] = 0; } void add_point(T x, T y) { auto p = data.lower_bound(x); if(p->second >= y) return; const T nxtY = p->second; --p; while(p->second <= y) { auto it = *p; p = --data.erase(p); sum -= (it.first - p->first) * (it.second - nxtY); } sum += (x - p->first) * (y - nxtY); data[x] = y; } int64 get() { return sum; } };
#line 1 "structure/others/union-rectangle.hpp" template< typename T > struct UnionRectangle { map< T, T > data; int64 sum; UnionRectangle() : sum(0) { const T INF = numeric_limits< T >::max(); data[0] = INF; data[INF] = 0; } void add_point(T x, T y) { auto p = data.lower_bound(x); if(p->second >= y) return; const T nxtY = p->second; --p; while(p->second <= y) { auto it = *p; p = --data.erase(p); sum -= (it.first - p->first) * (it.second - nxtY); } sum += (x - p->first) * (y - nxtY); data[x] = y; } int64 get() { return sum; } };