QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#22565#2849. 弗雷兹的玩具商店blackswallow#WA 570ms263424kbC++112.8kb2022-03-09 20:27:182022-04-30 01:21:11

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-30 01:21:11]
  • 评测
  • 测评结果:WA
  • 用时:570ms
  • 内存:263424kb
  • [2022-03-09 20:27:18]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define fr(i, x, y) for (int i = (x), _ed = (y); i <= _ed; i++) 
#define rp(i, x, y) for (int i = (x), _ed = (y); i >= _ed; i--) 

const int maxn = 2e5 + 40;

int n, m;
int c[maxn], v[maxn];

#define ls rt << 1
#define rs rt << 1 | 1

#define int long long
int maxx[maxn << 2][61];

int tag1[maxn << 2], tag2[maxn << 2];
int tmp[62];
void pushup(int rt) { for (int i = 1; i <= m; i++) maxx[rt][i] = max(maxx[ls][i], maxx[rs][i]); }
void push1(int rt, int v) {
	for (int i = 1; i <= m; i++) {
		int k = (i + v) %m; if (k == 0) k = m;
		tmp[k] = maxx[rt][i];
	}
	for (int i = 1; i <= m; i++) maxx[rt][i] = tmp[i];
	(tag1[rt] += v) %= m;
}

void push2(int rt, int v) {
	for (int i = 1; i <= m; i++) maxx[rt][i] += v;
	tag2[rt] += v;
}

void build(int rt, int l, int r) {
	if (l == r) {
		maxx[rt][c[l]] = v[l];
		return;
	}
	int mid = (l + r) / 2;
	build(ls, l, mid);
	build(rs, mid + 1, r);
	pushup(rt);
}
void pushdown(int rt) {
	if (tag1[rt]) push1(ls, tag1[rt]), push1(rs, tag1[rt]);
	if (tag2[rt]) push2(ls, tag2[rt]), push2(rs, tag2[rt]);
	tag1[rt] = tag2[rt] = 0;
}
void update(int rt, int l, int r, int L, int R, int v) {
	if (L <= l && r <= R) {
		push1(rt, v);
		return;
	}
	int mid = (l + r) / 2;
	pushdown(rt);
	if (L <= mid) update(ls, l, mid, L, R, v);
	if (R > mid) update(rs, mid + 1, r, L, R, v);
	pushup(rt);
}
void update2(int rt, int l, int r, int L, int R, int v) {
	if (L <= l && r <= R) {
		push2(rt, v);
		return;
	}
	int mid = (l + r) / 2;
	pushdown(rt);
	if (L <= mid) update2(ls, l, mid, L, R, v);
	if (R > mid) update2(rs, mid + 1, r, L, R, v);
	pushup(rt);
}
int ans[maxn];
void query(int rt, int l, int r, int L, int R) {
	if (L <= l && r <= R) {
		for (int i = 1; i <= m; i++) ans[i] = max(ans[i], maxx[rt][i]);
		return ;
	}
	int mid = (l + r) / 2;
	pushdown(rt);
	if (L <= mid) query(ls, l, mid, L, R);
	if (R > mid) query(rs, mid + 1, r, L, R);
	pushup(rt);
}


inline int ri() {
	int x; scanf("%lld", &x); return x;
}
int anss[maxn];
signed main() {
	n = ri(), m = ri();
	for (int i = 1; i <= n; i++) c[i] = ri();
	for (int i = 1; i <= n; i++) v[i] = ri();
	build(1, 1, n);
	int q; q = ri();
	while (q--) {
		int opt = ri(), l = ri(), r = ri();
		if (opt == 1) {
			int d = ri(); update(1, 1, n, l, r, d);
		}
		if (opt == 2) {
			int d = ri(); update2(1, 1, n, l, r, d);
		}
		if (opt == 3) {
			for (int i = 1; i <= m; i++) ans[i] = 0, anss[i] = 0;
			query(1, 1, n, l, r);
			int res = 0, ress = 0;
			for (int i = 1; i <= m; i++) {
				for (int j = i; j <= m; j++) {
					anss[j] = max(anss[j], anss[j - i] + ans[i]);
				}
			}
			for (int i = 1; i <= m; i++) res = res + anss[i], ress = ress ^ anss[i];
			printf("%lld %lld\n", res, ress);
		}
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 11992kb

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: 570ms
memory: 263424kb

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
84263735 ...

result:

wrong answer 17th lines differ - expected: '84257215 7195871', found: '84263735 7195415'