제출 #1159862

#제출 시각아이디문제언어결과실행 시간메모리
1159862itslq3D Histogram (COCI20_histogram)C++20
20 / 110
2595 ms50244 KiB
#include <bits/stdc++.h> #define int long long using namespace std; vector<int> A(2005), B(2005); struct node { node *lc, *rc; int l, r, m, v; long long dv = 0; node(int S, int E) { l = S; r = E; m = (l + r) / 2; if (l == r) { v = A[l]; } else { lc = new node(l, m); rc = new node(m + 1, r); v = min(lc -> v, rc -> v); } } int query(int S, int E) { if (l == S && r == E) return v + dv; if (E <= m) return lc -> query(S, E) + dv; if (S > m) return rc -> query(S, E) + dv; return min(lc -> query(S, m), rc -> query(m + 1, E)) + dv; } void update(int S, int E, int D) { int total; if (l == S && r == E) { dv += D; return; } else if (E <= m) lc -> update(S, E, D); else if (S > m) rc -> update(S, E, D); else { lc -> update(S, m, D); rc -> update(m + 1, E, D); } v = min(lc -> v + lc -> dv, rc -> v + rc -> dv); } } *root1, *root2; signed main() { int N, M = 0; cin >> N; for (int i = 0; i < N; i++) cin >> A[i] >> B[i]; root1 = new node(0, N); A = B; root2 = new node(0, N); for (int i = 0; i < N; i++) { for (int j = i; j < N; j++) { M = max(M, root1 -> query(i, j) * root2 -> query(i, j) * (j - i + 1)); } } cout << M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...