Submission #274890

#TimeUsernameProblemLanguageResultExecution timeMemory
274890lookcookDivide and conquer (IZhO14_divide)C++17
100 / 100
189 ms33144 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int maxn = (1<<18); int tree[2*maxn]; void update(int k, int v) { for (int i = k+maxn; i >= 1; i /= 2) tree[i] = min(tree[i], v); } int query(int l, int r) { l += maxn, r += maxn; int res = 1e18; while (l <= r) { if (l%2==1) res = min(res, tree[l++]); if (r%2==0) res = min(res, tree[r--]); l /= 2, r /= 2; } return res; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); for (int i = 0; i < 2*maxn; i++) tree[i] = 1e18; int n; cin >> n; int x[n+1], g[n+1], e[n+1]; x[0] = g[0] = e[0] = 0; set<int> s; for (int i = 1; i <= n; i++) { int xi, gi, ei; cin >> xi >> gi >> ei; x[i] = xi; g[i] = g[i-1] + gi; e[i] = e[i-1] + ei; s.insert(x[i]-e[i-1]); s.insert(x[i]-e[i]); } vector<int> v(s.begin(), s.end()); map<int,int> m; for (int i = 0; i < v.size(); i++) m[v[i]] = i; int best = 0; for (int r = 1; r <= n; r++) { update(m[x[r]-e[r-1]], g[r-1]); int res = g[r]-query(m[x[r]-e[r]], maxn-1); best = max(best, res); } cout << best << '\n'; }

Compilation message (stderr)

divide.cpp: In function 'int main()':
divide.cpp:43:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for (int i = 0; i < v.size(); i++) m[v[i]] = i;
      |                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...