제출 #1148590

#제출 시각아이디문제언어결과실행 시간메모리
1148590marinalucaDivide and conquer (IZhO14_divide)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC optimize ("fast-math") #pragma GCC optimize ("unroll-loops") using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; //#define int long long #define ll long long #define all (x) begin(x), end (x) #define xx first #define yy second using pii = pair <int, int>; using tii = tuple <int, int, int>; /** #define cin fin #define cout fout **/ int n; constexpr int NMAX = (int) 1e6+12; int x[NMAX], gold[NMAX], e[NMAX], lazy[NMAX]; inline void build_tree (int i, int st, int dr, int poz, int x) { if (st == dr) { lazy[i] = x; return; } int mijl = (st + dr) >> 1; if (mijl < poz){ build_tree ((i << 1) + 1, mijl + 1, dr, poz, x); } else { build_tree (i << 1, st, mijl, poz, x); } lazy[i] = max (lazy[i << 1], lazy[(i << 1) + 1]); } inline int query (int i, int st, int dr, int val) { if (st == dr) return st; int mijl = (st + dr) >> 1; if (lazy[(i << 1) + 1] >= val) return ((i << 1) + 1, mijl + 1, dr, val); return (i << 1, st, mijl, val); } signed main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; int g, energy, i = 1; for (;i <= n; ++ i) { cin >> x[i] >> g >> energy; gold[i] = gold[i - 1] + g; e[i] = e[i - 1] + energy; build_tree(1, 1, n, i, e[i] - x[i]); } int maxi = 0; for (;i<=n; ++ i) { int ans = query (1, 1, n, e[i - 1] - x[i]); maxi = max (maxi, e[ans] - e[i - 1]); } cout << maxi; return 0 ^ 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...