QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#553143#9240. Mosaicdalao_see_me#5 132ms27652kbC++143.5kb2024-09-08 09:49:592024-09-08 09:49:59

Judging History

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

  • [2024-09-08 09:49:59]
  • 评测
  • 测评结果:5
  • 用时:132ms
  • 内存:27652kb
  • [2024-09-08 09:49:59]
  • 提交

answer

#include "mosaic.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 5;
typedef pair <int, int> pii;
int n, q;
int a[N], b[N], col[N];
struct Node {
	int l, r, id, w;
} ;
vector <Node> t[N];
vector <pii> S;
struct Mat {
	int n, m;
	LL a[3][3];
	Mat operator + (const Mat &B) {
		Mat res; res.n = n; res.m = m;
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				res.a[i][j] = a[i][j] + B.a[i][j];
		return res;
	}
	Mat operator * (const Mat &B) {
		Mat res; res.n = n; res.m = B.m;
		memset(res.a, 0, sizeof(res.a));
		for (int i = 0; i < n; i++)
			for (int k = 0; k < m; k++)
				for (int j = 0; j < B.m; j++)
					res.a[i][j] += a[i][k] * B.a[k][j];
		return res;
	}
} clr, rev, upd;
struct Seg {
	#define lx x << 1
	#define rx x << 1 | 1
	Mat t[N << 2], tag[N << 2];
	void upd(int x, const Mat &w) {
		t[x] = t[x] * w;
		tag[x] = tag[x] * w;
	}
	void pushup(int x) {
		t[x] = t[lx] + t[rx];
	}
	void pushdown(int x) {
		upd(lx, tag[x]);
		upd(rx, tag[x]);
		tag[x] = clr;
	}
	void build(int x, int L, int R) {
		tag[x] = clr;
		if (L == R) {
			t[x].a[0][0] = t[x].a[0][1] = a[L]; t[x].a[0][2] = 1;
			t[x].n = 1; t[x].m = 3; return;
		}
		int mid = L + R >> 1;
		build(lx, L, mid);
		build(rx, mid + 1, R);
		pushup(x);
	}
	void modify(int x, int pos, int w, int L, int R) {
		if (L == R) return void(t[x].a[0][1] = w);
		pushdown(x);
		int mid = L + R >> 1;
		if (pos <= mid) modify(lx, pos, w, L, mid);
		else modify(rx, pos, w, mid + 1, R);
		pushup(x);
	}
	void change(int x, int l, int r, const Mat &w, int L, int R) {
		if (l <= L && R <= r) return upd(x, w);
		pushdown(x);
		int mid = L + R >> 1;
		if (l <= mid) change(lx, l, r, w, L, mid);
		if (r > mid) change(rx, l, r, w, mid + 1, R);
		pushup(x);
	}
	LL query(int x, int l, int r, int L, int R) {
		if (l <= L && R <= r) return t[x].a[0][0];
		pushdown(x);
		int mid = L + R >> 1; LL res = 0;
		if (l <= mid) res += query(lx, l, r, L, mid);
		if (r > mid) res += query(rx, l, r, mid + 1, R);
		return res;
	}
} seg;
vector <LL> mosaic(vector <int> X, vector <int> Y, vector <int> T, vector <int> B, vector <int> L, vector <int> R) {
	n = X.size(); q = T.size(); vector <LL> Ans(q);
	for (int i = 0; i < n; i++) a[i + 1] = X[i], b[i + 1] = Y[i];
	for (int i = 0; i < q; i++) {
		Node w; w.l = L[i] + 1; w.r = R[i] + 1; w.id = i;
		if (T[i]) {
			w.w = -1;
			t[T[i]].push_back(w);
		}
		w.w = 1; t[B[i] + 1].push_back(w);
	}
	for (int i = 2; i <= n; i++) S.push_back(make_pair(i, i)), col[i] = a[i];
	memset(clr.a, 0, sizeof(clr.a));
	clr.n = clr.m = 3; clr.a[0][0] = clr.a[1][1] = clr.a[2][2] = 1;
	rev = clr; rev.a[1][1] = -1; rev.a[2][1] = 1; upd = clr; upd.a[1][0] = 1;
	seg.build(1, 1, n);
	for (auto p : t[1]) Ans[p.id] += p.w * seg.query(1, p.l, p.r, 1, n);
	for (int i = 2; i <= n; i++) {
		int c = b[i], lst = 0; seg.modify(1, 1, c, 1, n);
		vector <pii> tmp;
		for (auto p : S) {
			if (col[p.first]) {
				seg.change(1, p.first, p.second, rev, 1, n);
				if (c == col[p.first] && lst) {
					tmp.push_back(make_pair(lst, p.first - 1));
					lst = p.first;
				}
				if (!lst) lst = p.first;
				c = (p.second - p.first) & 1; col[p.first] = 0;
			}
			else {
				if (!c) seg.change(1, p.first, p.second, rev, 1, n);
				c ^= (p.second - p.first + 1) & 1; col[p.first] ^= 1;
			}
		}
		tmp.push_back(make_pair(lst, n)); swap(S, tmp);
		seg.change(1, 1, n, upd, 1, n);
		for (auto p : t[i]) Ans[p.id] += p.w * seg.query(1, p.l, p.r, 1, n);
	}
	return Ans;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 0ms
memory: 14332kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
1
0
0
10
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
0
0
0
0
0
0
0
0
0
0

result:

ok 

Test #2:

score: 5
Accepted
time: 0ms
memory: 14056kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
1
1
1
10
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
1
1
1
1
1
1
1
1
1
1

result:

ok 

Test #3:

score: 5
Accepted
time: 3ms
memory: 14336kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
1 0
1 0
10
1 1 0 1
1 1 0 1
0 0 0 0
0 1 0 1
0 1 0 1
1 1 0 0
0 1 0 1
0 1 1 1
1 1 0 1
0 0 0 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
1
1
1
2
2
0
2
1
1
1

result:

ok 

Test #4:

score: 5
Accepted
time: 3ms
memory: 14288kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
1 0
1 0
10
0 1 1 1
0 1 0 1
0 1 0 0
1 1 0 1
0 1 0 1
0 1 0 0
1 1 1 1
0 0 0 1
0 1 0 0
1 1 0 0

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
1
2
1
1
2
1
1
1
1
0

result:

ok 

Test #5:

score: 5
Accepted
time: 0ms
memory: 11984kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
0 1
0 0
10
0 1 0 0
0 0 0 1
0 1 0 0
0 0 0 0
1 1 1 1
0 1 0 0
0 0 0 1
0 1 0 1
0 1 0 1
0 1 0 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
0
1
0
0
0
0
1
1
1
1

result:

ok 

Test #6:

score: 5
Accepted
time: 0ms
memory: 14056kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
1 1
1 0
10
0 0 0 1
0 0 0 1
1 1 0 1
0 1 0 1
0 1 0 0
0 1 1 1
1 1 0 1
0 0 1 1
0 1 0 0
0 1 0 0

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
2
2
0
2
1
1
0
1
1
1

result:

ok 

Test #7:

score: 5
Accepted
time: 2ms
memory: 11992kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
0 0
0 1
10
0 0 0 0
0 1 0 1
0 1 0 1
0 1 0 1
0 1 1 1
0 0 1 1
0 0 0 1
0 1 0 0
1 1 0 1
1 1 0 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
0
1
1
1
0
0
0
1
1
1

result:

ok 

Test #8:

score: 5
Accepted
time: 2ms
memory: 12020kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
1 0
1 1
10
0 1 0 0
1 1 0 1
0 0 0 1
1 1 1 1
1 1 0 0
0 1 1 1
0 1 0 0
0 0 1 1
1 1 0 1
0 1 0 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
2
1
1
0
1
0
2
0
1
2

result:

ok 

Test #9:

score: 5
Accepted
time: 0ms
memory: 12076kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
0 1
0 1
10
0 1 0 1
0 1 0 1
1 1 1 1
0 1 0 1
0 0 1 1
0 1 0 1
0 1 1 1
0 0 0 0
0 1 0 0
0 1 0 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
2
2
0
2
1
2
1
0
1
2

result:

ok 

Test #10:

score: 5
Accepted
time: 2ms
memory: 12280kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
2
1 1
1 1
10
0 0 0 1
0 1 0 0
0 1 0 0
0 1 0 1
0 0 0 0
0 1 0 1
0 1 0 1
0 1 1 1
0 1 0 1
1 1 1 1

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
2
2
2
3
1
3
3
1
3
0

result:

ok 

Subtask #2:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Test #11:

score: 0
Wrong Answer
time: 0ms
memory: 14088kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
199
0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1...

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
1238
5813
1030
482
11934
1462
2004
4974
820
2137
36
500
810
6526
6095
712
45
11
221
473
3526
101
4706
56
1570
1400
94
1639
1246
5834
6399
3101
66
2910
1268
63
4258
2323
381
3192
496
1783
652
1900
882
6048
2214
2224
294
4079
2337
4998
1073
1728
2312
2067
87
11315
1...

result:

wrong answer 3rd lines differ - on the 1st token, expected: '1078', found: '1238'

Subtask #3:

score: 0
Time Limit Exceeded

Test #18:

score: 0
Time Limit Exceeded

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
199999
0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 ...

output:


result:


Subtask #4:

score: 0
Skipped

Dependency #2:

0%

Subtask #5:

score: 0
Wrong Answer

Test #31:

score: 0
Wrong Answer
time: 132ms
memory: 27652kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
10
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
200000
1 7 0 4
3 4 3 4
3 6 2 5
4 5 6 7
5 7 2 8
0 6 4 7
0 5 6 7
1 3 9 9
6 9 1 7
2 9 4 6
4 4 6 7
0 1 8 8
7 7 0 3
0 4 1 7
2 2 0 9
3 9 4 6
3 9 0 9
1 8 4 6
4 5 5 7
0 6 2 3
2 3 0 6
1 9 8 8
2 4 3 4
3 6 2 9
3 9 2 7
1 3 0 3
0 8 2 4
3...

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
20
2
8
2
10
12
5
2
14
12
1
0
3
14
5
10
39
12
3
6
8
4
3
16
21
7
12
6
14
11
19
3
7
5
6
21
6
4
9
8
19
24
2
5
11
8
16
3
4
20
4
9
23
1
2
5
6
4
1
5
4
3
6
4
18
32
10
2
7
7
5
15
11
7
4
4
10
6
4
23
8
13
8
3
3
8
27
4
3
3
6
14
21
14
9
2
3
2
4
16
20
7
3
7
3
15
16
8
36
7
6
7
9...

result:

wrong answer 3rd lines differ - on the 1st token, expected: '14', found: '20'

Subtask #6:

score: 0
Time Limit Exceeded

Test #42:

score: 0
Time Limit Exceeded

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
199999
0 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 ...

output:


result:


Subtask #7:

score: 0
Skipped

Dependency #3:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%