compro-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub ningenMe/compro-library

:heavy_check_mark: MaximumRectangle - 最大長方形
(lib/17-rectangle/MaximumRectangle.cpp)

MaximumRectangle

メソッド

参考資料

Verified with

Code

/*
 * @title MaximumRectangle - 最大長方形
 * @docs md/rectangle/MaximumRectangle.md
 */
long long MaximumRectangle(vector<long long> ar){
	ar.push_back(0);
	stack<pair<long long,long long>> st;
	long long res = 0;
	for(long long r = 0; r < ar.size(); ++r){
		long long vr = ar[r];
		long long x = r;		
		while(st.size() && st.top().first > vr) {
			auto [vl, l] = st.top(); st.pop();
			x = l;
			res = max(res,vl*(r - l));
		}
		if(st.empty() || (st.size() && st.top().first < vr)) st.push({vr,x});
	}
	return res;
}
#line 1 "lib/17-rectangle/MaximumRectangle.cpp"
/*
 * @title MaximumRectangle - 最大長方形
 * @docs md/rectangle/MaximumRectangle.md
 */
long long MaximumRectangle(vector<long long> ar){
	ar.push_back(0);
	stack<pair<long long,long long>> st;
	long long res = 0;
	for(long long r = 0; r < ar.size(); ++r){
		long long vr = ar[r];
		long long x = r;		
		while(st.size() && st.top().first > vr) {
			auto [vl, l] = st.top(); st.pop();
			x = l;
			res = max(res,vl*(r - l));
		}
		if(st.empty() || (st.size() && st.top().first < vr)) st.push({vr,x});
	}
	return res;
}
Back to top page