QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#21557 | #2849. 弗雷兹的玩具商店 | Skyowo# | WA | 231ms | 136252kb | C++14 | 2.9kb | 2022-03-07 15:01:04 | 2022-05-08 03:38:04 |
Judging History
answer
// Skyqwq
#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define mp make_pair
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; }
template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; }
template <typename T> void inline read(T &x) {
int f = 1; x = 0; char s = getchar();
while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); }
while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
x *= f;
}
const int N = 200005, M = 61, INF = 1e9;
int n, m, q, c[N], v[N];
int d[N << 2][M], tv[N << 2], tw[N << 2], nw[M];
#define ls (p << 1)
#define rs (p << 1 | 1)
void inline pv(int p, int v) {
for (int i = 1; i <= m; i++)
nw[i] = d[p][i], d[p][i] = -INF;
for (int i = 1; i <= m; i++) {
int O = i + v;
if (O > m) O -= m;
chkMax(d[p][O], nw[i]);
}
tv[p] += v;
}
void inline pw(int p, int v) {
for (int i = 1; i <= m; i++)
d[p][i] += v;
tw[p] += v;
}
void inline pushup(int p) {
for (int i = 1; i <= m; i++)
d[p][i] = max(d[ls][i], d[rs][i]);
}
void inline pushdown(int p) {
if (tw[p]) {
pw(ls, tw[p]);
pw(rs, tw[p]);
tw[p] = 0;
}
if (tv[p]) {
pv(ls, tv[p]);
pv(rs, tv[p]);
tv[p] = 0;
}
}
LL val[M], f[M];
void build(int p, int l, int r) {
if (l == r) {
for (int i = 1; i <= m; i++) d[p][i] = -INF;
d[p][c[r]] = v[r];
return;
}
int mid = (l + r) >> 1;
build(ls, l, mid);
build(rs, mid + 1, r);
pushup(p);
}
void chg(int p, int l, int r, int x, int y, int k, int o) {
if (x <= l && r <= y) {
if (o == 1) pv(p, k);
else pw(p, k);
return;
}
pushdown(p);
int mid = (l + r) >> 1;
if (x <= mid) chg(ls, l, mid, x, y, k, o);
if (mid < y) chg(rs, mid + 1, r, x, y, k, o);
pushup(p);
}
void qry(int p, int l, int r, int x, int y) {
if (x <= l && r <= y) {
for (int i = 1; i <= m; i++)
chkMax(val[i], (LL)d[p][i]);
return;
}
pushdown(p);
int mid = (l + r) >> 1;
if (x <= mid) qry(ls, l, mid, x, y);
if (mid < y) qry(rs, mid + 1, r, x, y);
}
int main() {
read(n), read(m);
for (int i = 1; i <= n; i++) read(c[i]);
for (int i = 1; i <= n; i++) read(v[i]);
build(1, 1, n);
read(q);
while (q--) {
int op, l, r; read(op), read(l), read(r);
if (op <= 2) {
int d; read(d);
chg(1, 1, n, l, r, d, op);
} else {
memset(f, 0, sizeof f);
memset(val, 0, sizeof val);
qry(1, 1, n, l, r);
f[0] = 0;
for (int i = 1; i <= m; i++) {
//cout << i << " " << val[i] << endl;
for (int j = i; j <= m; j++)
chkMax(f[j], f[j - i] + val[i]);
}
LL a0 = 0, a1 = 0;
for (int i = 1; i <= m; i++) {
a0 += f[i];
a1 ^= f[i];
}
printf("%lld %lld\n", a0, a1);
}
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 4ms
memory: 9872kb
input:
4 10 1 6 10 2 100 2333 666 300 7 3 1 4 3 1 3 1 2 4 1 3 1 4 2 2 3 -1000 2 2 3 -600 3 2 4
output:
15165 2865 14165 2169 36630 798 4899 1273
result:
ok 4 lines
Test #2:
score: -100
Wrong Answer
time: 231ms
memory: 136252kb
input:
200000 60 21 16 58 5 26 44 30 40 31 27 50 21 59 50 37 39 26 9 15 14 9 59 40 29 32 5 2 25 57 18 4 9 25 1 13 42 36 34 21 6 53 2 18 51 51 55 29 17 3 36 22 11 26 1 40 58 57 33 22 53 42 26 1 6 18 6 47 54 31 59 51 23 60 1 13 43 55 34 59 49 9 12 51 34 4 22 31 1 47 45 45 28 10 38 34 19 35 12 4 5 11 47 28 2 ...
output:
304478979 5965183 302725180 6346266 263891804 12270170 206665590 7376160 224407908 12588660 302401755 6812441 298016030 8641780 187482000 7499280 276575975 13386421 302685395 8377169 304347825 5950953 296928490 9925716 273952510 11264178 185846328 1238664 276368626 13405014 200927082 49156 84257215 ...
result:
wrong answer 340th lines differ - expected: '4303783020 262840504', found: '72388613 4818591'