제출 #1004125

#제출 시각아이디문제언어결과실행 시간메모리
1004125coolboy19521말 (IOI15_horses)C++17
17 / 100
37 ms27872 KiB
#include "bits/stdc++.h" #include "horses.h" #define i64 long long using namespace std; const int sz = 5e5 + 25; const i64 md = 1e9 + 7; const i64 inf = 1e18; i64 lzm[sz * 4], lzd[sz * 4]; i64 a[sz], b[sz], c[sz]; i64 st[sz * 4]; int n; void build(int le, int ri, int v) { if (le == ri) { st[v] = c[le] * b[le]; return; } int mi = le + (ri - le) / 2; build(le, mi, v * 2); build(mi + 1, ri, v * 2 + 1); st[v] = max(st[v * 2], st[v * 2 + 1]); } void relax(int v) { st[v] *= lzm[v]; st[v] /= lzd[v]; lzm[v * 2] *= lzm[v]; lzm[v * 2 + 1] *= lzm[v]; lzd[v * 2] *= lzd[v]; lzd[v * 2 + 1] *= lzd[v]; lzm[v] = lzd[v] = 0; } void rupdate(int le, int ri, int ql, int qr, int v, i64 m, i64 d) { if (le > qr || ri < ql) return; if (ql <= le && ri <= qr) { lzm[v] = m; lzd[v] = d; relax(v); return; } int mi = le + (ri - le) / 2; rupdate(le, mi, ql, qr, v * 2, m, d); rupdate(mi + 1, ri, ql, qr, v * 2 + 1, m, d); st[v] = max(st[v * 2], st[v * 2 + 1]); } void pupdate(int le, int ri, int ix, int v, i64 m, i64 d) { if (le > ix || ri < ix) return; if (le == ix && ix == ri) { st[v] /= d; st[v] *= m; return; } int mi = le + (ri - le) / 2; pupdate(le, mi, ix, v * 2, m, d); pupdate(mi + 1, ri, ix, v * 2 + 1, m, d); st[v] = max(st[v * 2], st[v * 2 + 1]); } i64 query(int le, int ri, int ql, int qr, int v) { if (le > qr || ri < ql) { return -inf; } if (0 != lzm[v] && 0 != lzd[v]) { relax(v); } if (ql <= le && ri <= qr) { return st[v]; } int mi = le + (ri - le) / 2; i64 lq = query(le, mi, ql, qr, v * 2); i64 rq = query(mi + 1, ri, ql, qr, v * 2 + 1); return max(lq, rq); } int init(int N, int X[], int Y[]) { c[0] = 1; n = N; for (int i = 1; i <= N; i ++) { c[i] = c[i - 1] * X[i - 1]; a[i] = X[i - 1]; b[i] = Y[i - 1]; } build(1, N, 1); i64 r = query(1, n, 1, n, 1) % md; return (int) r; } int updateX(int pos, int val) { pos ++; rupdate(1, n, pos, n, 1, val, a[pos]); a[pos] = val; i64 r = query(1, n, 1, n, 1) % md; return (int) r; } int updateY(int pos, int val) { pos ++; pupdate(1, n, pos, 1, val, b[pos]); b[pos] = val; i64 r = query(1, n, 1, n, 1) % md; return (int) r; }
#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...