Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ALEX ENACHE
- #include <vector>
- #include <algorithm>
- #include <math.h>
- #include <iomanip>
- #include <bitset>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <map>
- #include <unordered_map>
- #include <set>
- #include <unordered_map>
- #include <random>
- #include <time.h>
- #include <assert.h>
- using namespace std;
- #include <fstream>
- //ifstream cin("input");ofstream cout("output");
- ifstream cin("skyline.in");ofstream cout("skyline.out");
- const int MAXN = 4e4 + 5;
- long long h[MAXN], l[MAXN];
- int st[MAXN];
- int dr[MAXN];
- long long sp[MAXN];
- stack < int > s;
- int main() {
- int n;
- cin >> n;
- for (int i = 1; i <= n; i++) {
- cin >> h[i] >> l[i];
- sp[i] = sp[i - 1] + l[i];
- }
- s.push(0);
- h[0] = -1;
- for (int i = 1; i <= n; i++) {
- while (h[s.top()] >= h[i]) {
- s.pop();
- }
- st[i] = s.top();
- s.push(i);
- }
- while (!s.empty()) {
- s.pop();
- }
- s.push(n+1);
- h[n+1] = -1;
- for (int i = n; i >= 1; i--) {
- while (h[s.top()] >= h[i]) {
- s.pop();
- }
- dr[i] = s.top();
- s.push(i);
- }
- long long ans = 0;
- for (int i = 1; i <= n; i++) {
- long long now = h[i] * (sp[dr[i] - 1] - sp[st[i]]);
- ans = max(ans, now);
- }
- cout << ans << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement