Submission #1163849

#TimeUsernameProblemLanguageResultExecution timeMemory
1163849nhphucSterilizing Spray (JOI15_sterilizing)C++20
80 / 100
5092 ms4340 KiB
#include <bits/stdc++.h> using namespace std; const int N = 100100; int n, q, k, a[N], tmax[N * 4]; long long t[N * 4]; void build (int id, int l, int r){ if (l == r){ t[id] = tmax[id] = a[l]; return; } int m = l + r >> 1; build(id * 2, l, m); build(id * 2 + 1, m + 1, r); t[id] = (t[id * 2] + t[id * 2 + 1]); tmax[id] = max(t[id * 2], t[id * 2 + 1]); return; } void upd (int id, int l, int r, int u, int v){ if (l > v || r < u || tmax[id] == 0){ return; } if (l == r){ t[id] /= k; tmax[id] /= k; return; } int m = l + r >> 1; upd(id * 2, l, m, u, v); upd(id * 2 + 1, m + 1, r, u, v); t[id] = (t[id * 2] + t[id * 2 + 1]); tmax[id] = max(tmax[id * 2], tmax[id * 2 + 1]); return; } void assign (int id, int l, int r, int i, int x){ if (l == r){ t[id] = tmax[id] = x; return; } int m = l + r >> 1; if (i <= m){ assign(id * 2, l, m, i, x); } else { assign(id * 2 + 1, m + 1, r, i, x); } t[id] = (t[id * 2] + t[id * 2 + 1]); tmax[id] = max(tmax[id * 2], tmax[id * 2 + 1]); return; } long long get (int id, int l, int r, int u, int v){ if (l > v || r < u){ return 0ll; } if (l >= u && r <= v){ return t[id]; } int m = l + r >> 1; return (get(id * 2, l, m, u, v) + get(id * 2 + 1, m + 1, r, u, v)); } int32_t main (){ ios::sync_with_stdio(false); cin.tie(nullptr); if (fopen ("test.inp", "r")){ freopen ("test.inp", "r", stdin); freopen ("test.out", "w", stdout); } cin >> n >> q >> k; for (int i = 1; i <= n; ++i){ cin >> a[i]; } build(1, 1, n); for (int i = 1; i <= q; ++i){ int tp, x, y; cin >> tp >> x >> y; if (tp == 1){ assign(1, 1, n, x, y); } else if (tp == 2){ upd(1, 1, n, x, y); } else if (tp == 3){ cout << get(1, 1, n, x, y) << "\n"; } } }

Compilation message (stderr)

sterilizing.cpp: In function 'int32_t main()':
sterilizing.cpp:69:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |         freopen ("test.inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:70:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |         freopen ("test.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...