Submission #1097770

#TimeUsernameProblemLanguageResultExecution timeMemory
1097770thangdz2k7Two Dishes (JOI19_dishes)C++17
74 / 100
3065 ms164688 KiB
// author : thembululquaUwU // 3.9.2024 #include <bits/stdc++.h> #define pb push_back #define fi first #define se second #define endl '\n' using namespace std; using ll = long long; using ii = pair <int, int>; using vi = vector <int>; const int N = 1e6 + 5; const int mod = 1e9 + 7; void maxl(auto &a, auto b) {a = max(a, b);} void minl(auto &a, auto b) {a = min(a, b);} int n, m; ll a[N], b[N], s[N], t[N], p[N], q[N]; vi event[N]; const ll inf = 1e18; ll Max[4 * N], lz[4 * N]; void update(int u, int v, ll val, bool op, int s = 1, int l = 0, int r = m){ if (v < l || u > r) return; if (u <= l && r <= v){ if (op) Max[s] += val, lz[s] += val; else maxl(Max[s], val); return; } int mid = l + r >> 1; if (!op) val -= lz[s]; update(u, v, val, op, s << 1, l, mid); update(u, v, val, op, s << 1 | 1, mid + 1, r); Max[s] = max(Max[s << 1], Max[s << 1 | 1]) + lz[s]; } ll get(int u, int v, int s = 1, int l = 0, int r = m){ if (v < l || u > r) return -inf; if (u <= l && r <= v) return Max[s]; int mid = l + r >> 1; return max(get(u, v, s << 1, l, mid), get(u, v, s << 1 | 1, mid + 1, r)) + lz[s]; } void solve(){ cin >> n >> m; for (int i = 1; i <= n; ++ i) cin >> a[i] >> s[i] >> p[i], a[i] += a[i - 1]; for (int i = 1; i <= m; ++ i) cin >> b[i] >> t[i] >> q[i], b[i] += b[i - 1]; for (int i = 1; i <= n; ++ i) s[i] = upper_bound(b, b + m + 1, s[i] - a[i]) - b - 1; for (int i = 1; i <= m; ++ i){ t[i] = upper_bound(a, a + n + 1, t[i] - b[i]) - a; event[t[i]].pb(i); } for (int i = 1; i <= 4 * m + 4; ++ i) Max[i] = -inf, lz[i] = 0; update(0, 0, 0, 0); for (int i = 1; i <= n + 1; ++ i){ for (int j : event[i]){ ll f = get(0, j - 1); update(j, j, f, 0); } if (i > n) update(m, m, get(0, m - 1), 0); ll f = get(0, s[i]); update(s[i] + 1, s[i] + 1, f, 0); update(0, s[i], p[i], 1); for (int j : event[i]) update(j, m, q[j], 1); } cout << Max[1]; } int main(){ if (fopen("pqh.inp", "r")){ freopen("pqh.inp", "r", stdin); freopen("pqh.out", "w", stdout); } ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; while (t --) solve(); return 0; }

Compilation message (stderr)

dishes.cpp:18:11: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   18 | void maxl(auto &a, auto b) {a = max(a, b);}
      |           ^~~~
dishes.cpp:18:20: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   18 | void maxl(auto &a, auto b) {a = max(a, b);}
      |                    ^~~~
dishes.cpp:19:11: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   19 | void minl(auto &a, auto b) {a = min(a, b);}
      |           ^~~~
dishes.cpp:19:20: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   19 | void minl(auto &a, auto b) {a = min(a, b);}
      |                    ^~~~
dishes.cpp: In function 'void update(int, int, ll, bool, int, int, int)':
dishes.cpp:36:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   36 |     int mid = l + r >> 1; if (!op) val -= lz[s];
      |               ~~^~~
dishes.cpp: In function 'll get(int, int, int, int, int)':
dishes.cpp:46:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   46 |     int mid = l + r >> 1;
      |               ~~^~~
dishes.cpp: In function 'int main()':
dishes.cpp:80:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |         freopen("pqh.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
dishes.cpp:81:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |         freopen("pqh.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...