Submission #884196

#TimeUsernameProblemLanguageResultExecution timeMemory
884196TahirAliyevArt Exhibition (JOI18_art)C++17
100 / 100
478 ms40700 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int ll #define pii pair<ll, ll> #define oo 1e18 #define all(v) v.begin(), v.end() int n; const int MAX = 5e5 + 5; pii arr[MAX]; int pre[MAX]; int tree[4 * MAX]; void build(int node, int l, int r){ if(l == r){ tree[node] = pre[l] - arr[l].first; return; } int mid = (l + r) / 2; build(2 * node, l, mid); build(2 * node + 1, mid + 1, r); tree[node] = max(tree[2 * node], tree[2 * node + 1]); } int ask(int node, int l, int r, int ql, int qr){ if(qr < l | r < ql) return -oo; if(ql <= l && r <= qr) return tree[node]; int mid = (l + r) / 2; return max(ask(2 * node, l, mid, ql, qr), ask(2 * node + 1, mid + 1, r, ql, qr)); } signed main(){ fill(tree, tree + 4 * MAX, -oo); cin >> n; for(int i = 1; i <= n; i++) cin >> arr[i].first >> arr[i].second; sort(arr + 1, arr + n + 1); for(int i = 1; i <= n; i++){ pre[i] = pre[i - 1] + arr[i].second; } build(1, 1, n); int upd = 0; int ans = 0; for(int i = 1; i <= n; i++){ ans = max(ans, ask(1, 1, n, i, n) + upd + arr[i].first); upd -= arr[i].second; } cout << ans << '\n'; }

Compilation message (stderr)

art.cpp: In function 'long long int ask(long long int, long long int, long long int, long long int, long long int)':
art.cpp:29:11: warning: suggest parentheses around comparison in operand of '|' [-Wparentheses]
   29 |     if(qr < l | r < ql) return -oo;
      |        ~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...