QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#875615 | #9986. Shiori | ucup-team5008 | WA | 3570ms | 60020kb | C++20 | 5.1kb | 2025-01-29 23:56:45 | 2025-01-29 23:56:46 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define rep2(i, j, k) for(ll i=ll(j);i<ll(k);i++)
#define rep(i, k) rep2(i,0,k)
#define rrep2(i, j, k) for(ll i=ll(j)-1;i>=ll(k);i--)
#define rrep(i, j) rrep2(i,j,0)
#define SZ(a) ll(a.size())
#define eb emplace_back
#define all(a) a.begin(),a.end()
using ll = long long;
using vl = vector<ll>;
using vvl = vector<vl>;
using P = pair<ll, ll>;
using vp = vector<P>;
using vvp = vector<vp>;
const ll inf = LLONG_MAX / 4;
template<class T>
bool chmin(T &a, T b) { return a > b ? a = b, 1 : 0; }
template<class T>
bool chmax(T &a, T b) { return a < b ? a = b, 1 : 0; }
class lazy_segtree {
using S = tuple<ll, int, ll, int>; // {sum, len, min, min_left_pos}
const S e = {0, 0, inf, -1};
S op(const S &l, const S &r) {
auto [ls, llen, lm, lp] = l;
auto [rs, rlen, rm, rp] = r;
if (lm <= rm) return {ls + rs, llen + rlen, lm, lp};
else return {ls + rs, llen + rlen, rm, llen + rp};
}
using F = P;
const F id = {0, 0};
F compose(const F &g, const F &f) {
if (g.first) return g;
return {f.first, f.second + g.second};
}
S mapping(const F &f, const S &x) {
auto [s, len, m, p] = x;
if (f.first) {
return {f.second * len, len, f.second, 0};
} else {
return {s + f.second * len, len, m + f.second, p};
}
}
int n, log;
vector<S> d;
vector<F> lz;
void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }
void all_apply(int k, F f) {
d[k] = mapping(f, d[k]);
if (k < n) lz[k] = compose(f, lz[k]);
}
void push(int k) {
all_apply(2 * k, lz[k]);
all_apply(2 * k + 1, lz[k]);
lz[k] = id;
}
public:
lazy_segtree(const vector<S> &init) {
log = 0;
while (1 << log < SZ(init)) log++;
n = 1 << log;
d.assign(2 * n, e);
lz.assign(n, id);
rep(i, SZ(init)) d[n + i] = init[i];
rrep2(i, n, 1) update(i);
}
S prod(int l, int r) {
assert(0 <= l and l <= r and r <= n);
l += n, r += n;
rrep2(i, log + 1, 1) {
if ((l >> i) << i != l) push(l >> i);
if ((r >> i) << i != r) push(r >> i);
}
S sl = e, sr = e;
while (l < r) {
if (l & 1) sl = op(sl, d[l++]);
if (r & 1) sr = op(d[--r], sr);
l >>= 1, r >>= 1;
}
return op(sl, sr);
}
void apply(int l, int r, F f) {
assert(0 <= l and l <= r and r <= n);
l += n, r += n;
rrep2(i, log + 1, 1) {
if ((l >> i) << i != l) push(l >> i);
if ((r >> i) << i != r) push(r >> i);
}
{
int l2 = l, r2 = r;
while (l < r) {
if (l & 1) all_apply(l++, f);
if (r & 1) all_apply(--r, f);
l >>= 1, r >>= 1;
}
l = l2, r = r2;
}
rep2(i, 1, log + 1) {
if ((l >> i) << i != l) update(l >> i);
if ((r >> i) << i != r) update(r >> i);
}
}
template<class F>
int max_right(int l, F f) {
assert(0 <= l && l <= n);
assert(f(e));
if (l == n) return n;
l += n;
rrep2(i, log + 1, 1) push(l >> i);
S now = e;
do {
while (~l & 1) l >>= 1;
if (!f(op(now, d[l]))) {
while (l < n) {
push(l);
l *= 2;
if (f(op(now, d[l]))) {
now = op(now, d[l]);
++l;
}
}
return l - n;
}
now = op(now, d[l]);
++l;
} while ((l & -l) != l);
return n;
}
};
int main() {
cin.tie(0)->sync_with_stdio(0);
cout << fixed << setprecision(10);
int n, m;
cin >> n >> m;
vector<tuple<ll, int, ll, int>> init(n);
rep(i, n) {
ll a;
cin >> a;
init[i] = {a, 1, a, 0};
}
lazy_segtree st(init);
rep(_, m) {
int op;
cin >> op;
if (op == 1) {
int l, r, v;
cin >> l >> r >> v;
--l;
st.apply(l, r, P(1, v));
} else if (op == 2) {
int l, r;
cin >> l >> r;
--l;
ll mex = 0;
vector<tuple<int, int, ll>> ls;
while (true) {
auto [_, _2, mn, nl] = st.prod(l, r);
nl += l;
if (mn > mex) break;
assert(mn == mex - 1 or mn == mex);
if (mn == mex) ++mex;
int nr = st.max_right(nl, [&](auto t) {
return get<0>(t) == get<2>(t) * get<1>(t);
});
chmin(nr, r);
ls.eb(nl, nr, mn);
st.apply(nl, nr, P(1, inf));
}
for (auto [nl, nr, val]: ls) {
st.apply(nl, nr, P(1, val));
}
st.apply(l, r, P(0, mex));
} else {
int l, r;
cin >> l >> r;
--l;
cout << get<0>(st.prod(l, r)) << '\n';
}
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3584kb
input:
5 8 0 7 2 1 0 1 2 4 0 2 1 3 2 3 4 3 1 3 1 2 3 4 3 1 4 2 1 5 3 2 5
output:
5 11 22
result:
ok 3 number(s): "5 11 22"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3456kb
input:
1 1 0 1 1 1 0
output:
result:
ok 0 number(s): ""
Test #3:
score: 0
Accepted
time: 156ms
memory: 3584kb
input:
10 500000 0 0 0 0 0 0 0 0 0 0 3 2 9 2 4 10 2 2 7 2 7 9 3 1 1 3 5 8 1 5 10 0 3 1 9 3 5 9 2 2 4 1 2 4 0 2 5 6 3 8 8 1 4 6 0 1 6 6 0 2 4 10 3 1 9 3 5 7 1 4 10 0 3 6 9 3 2 6 2 1 8 1 5 9 0 3 7 8 3 4 8 2 4 8 2 5 8 2 1 9 2 3 8 1 5 10 0 2 4 8 3 1 6 2 1 4 2 3 7 3 4 10 1 4 6 0 1 1 6 0 2 3 7 1 1 1 0 2 1 10 1 5...
output:
0 0 10 7 0 0 6 3 0 0 0 1 25 12 10 0 0 0 0 17 23 1 20 2 11 27 26 2 18 2 2 0 0 0 2 4 1 0 0 0 7 2 0 4 32 15 7 11 0 4 5 2 8 5 1 6 0 7 0 7 6 3 2 5 0 0 0 7 14 2 5 0 2 0 0 6 12 6 0 2 3 0 0 1 16 12 1 1 12 0 3 4 4 10 3 16 0 17 2 4 0 0 16 8 2 8 18 23 2 24 4 12 7 4 14 5 0 2 8 4 16 10 6 4 21 15 1 3 3 0 2 5 0 2 ...
result:
ok 166844 numbers
Test #4:
score: 0
Accepted
time: 154ms
memory: 3584kb
input:
10 500000 0 0 0 0 0 0 0 0 0 0 2 9 10 1 1 3 0 1 1 2 0 2 2 4 3 8 8 2 6 6 2 5 6 3 2 9 2 4 4 1 2 6 0 2 5 7 1 2 10 0 3 1 4 3 1 10 1 6 7 0 1 1 1 0 1 3 9 0 3 4 7 3 2 8 1 6 9 0 1 3 5 0 1 5 10 0 3 2 5 1 2 9 0 1 7 8 0 2 5 10 3 2 3 2 5 5 2 8 9 3 1 6 2 2 6 2 3 6 3 4 5 1 1 6 0 1 1 5 0 3 3 8 3 2 9 3 3 7 1 2 10 0 ...
output:
0 9 0 0 0 0 0 0 2 5 2 3 1 0 5 7 1 0 1 3 20 1 23 13 7 14 6 19 0 2 1 2 1 1 0 1 2 2 3 1 0 0 12 28 20 0 0 0 0 0 1 0 1 1 0 2 21 6 9 2 5 10 0 0 0 1 2 1 0 0 0 1 1 0 3 0 2 0 2 0 2 2 2 0 8 3 2 1 0 2 12 4 2 0 0 6 0 9 3 15 0 0 6 0 14 11 6 0 5 4 4 26 11 8 7 7 10 0 4 6 2 4 4 6 4 7 0 3 6 4 20 3 17 14 18 14 9 13 8...
result:
ok 166636 numbers
Test #5:
score: 0
Accepted
time: 3334ms
memory: 60020kb
input:
500000 500000 472024 143520 268267 155743 162119 212911 326774 283734 445407 353394 432929 138490 36366 247037 157063 203731 162782 54322 321700 39379 6459 358816 32001 245189 167252 460348 113630 85323 283872 285182 191285 487821 395892 328168 467455 469639 234067 325083 145477 450046 16029 142429 ...
output:
71434 2040073 0 5432967 4856153 0 993046 27244642 6476935 2817769 6321297 0 1187529 2134 9498260 0 2681567 21686068 2490676 0 2661807 0 690198 18532465 0 9360769 6235737 313778 0 9648705 0 0 8508669 8822805 3211337 10292339 7544370 2240353 483384 0 55154 33327240 18370380
result:
ok 43 numbers
Test #6:
score: -100
Wrong Answer
time: 3570ms
memory: 60016kb
input:
500000 500000 388433 403915 446085 342213 78687 132025 495367 415850 421661 324738 378207 424322 385150 269889 110947 491850 37281 306409 22431 1697 406842 92252 168348 80192 462132 79516 120526 288279 17470 275682 152271 54233 472236 35 276649 120315 237183 488247 419837 452391 441014 66447 153212 ...
output:
0 10600620 0 43767619 4782686 10232345 4412493 159348 69708 62635917 17701192 14699133 12064763 9126802 2081338 45471292 45883442 4697355 0 12932289 7016726 10169363 0 13174506 45327610 3641329 0 0 4256057 9129565 14382856 59618831 5083076 0 9224290 386163 7378723 0 3580627 28026646 4142656 864
result:
wrong answer 30th numbers differ - expected: '11932419', found: '9129565'