QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#553185#9240. Mosaicdalao_see_me#5 136ms27460kbC++144.1kb2024-09-08 10:18:212024-09-08 10:18:24

Judging History

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

  • [2024-09-08 10:18:24]
  • 评测
  • 测评结果:5
  • 用时:136ms
  • 内存:27460kb
  • [2024-09-08 10:18:21]
  • 提交

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);
				col[p.first] = 0;
				if (c == col[p.first] && lst) {
					tmp.push_back(make_pair(lst, p.first - 1));
					lst = p.first;
				}
				if (!lst) lst = p.first;
				c = col[p.first] ^ ((p.second - p.first) & 1);
			}
			else {
				if (!c) {
					seg.change(1, p.first, p.second, rev, 1, n);
					col[p.first] = 1;
					if (c == col[p.first] && lst) {
						tmp.push_back(make_pair(lst, p.first - 1));
						lst = p.first;
					}
					if (!lst) lst = p.first;
					c = col[p.first] ^ ((p.second - p.first) & 1);
				}
				else {
					if (p.first < p.second) seg.change(1, p.first + 1, p.second, rev, 1, n), col[p.first + 1] = 0;
					if (!lst) tmp.push_back(make_pair(p.first, p.first));
					else tmp.push_back(make_pair(lst, p.first));
					if (p.first == p.second) c = lst = 0;
					else c = (p.second - p.first + 1) & 1, lst = p.first + 1;
				}
			}
		}
		if (lst < n) 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: 2ms
memory: 14132kb

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: 14060kb

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: 2ms
memory: 14068kb

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: 0ms
memory: 14064kb

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: 12036kb

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: 1ms
memory: 12036kb

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: 1ms
memory: 12024kb

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: 0ms
memory: 12056kb

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: 1ms
memory: 12064kb

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: 1ms
memory: 12320kb

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: 7
Accepted
time: 7ms
memory: 14392kb

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
1078
5062
897
428
10378
1260
1733
4327
697
1864
34
430
709
5682
5295
625
39
10
196
416
3048
87
4065
49
1368
1220
80
1440
1083
5053
5561
2680
56
2539
1107
57
3705
1996
327
2789
432
1542
571
1643
756
5253
1931
1934
245
3545
2026
4364
935
1506
1992
1815
75
9847
1279
...

result:

ok 

Test #12:

score: 7
Accepted
time: 7ms
memory: 12156kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
200
1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 1 1 1 0 0 1 1...

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
3769
339
45
1631
13942
12533
2707
3153
945
4842
2223
5488
1671
2091
557
4839
3455
3211
2621
5391
7299
2789
757
2455
2546
713
9014
2772
1901
3239
1974
2740
6109
1088
5177
958
240
296
2539
517
1889
1345
1467
4590
1944
7950
2623
7550
3121
3184
2851
1237
1233
4601
356...

result:

ok 

Test #13:

score: 0
Wrong Answer
time: 2ms
memory: 12076kb

input:

njJ9Z7VxxKGR6SUcJMgdzy3qMz4JZ1Tq
200
0 0 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1...

output:

Wm5rkGNobnYjFI7TIY17RAm6FAQ2LlO9
OK
417
1686
58
4282
141
6846
1379
662
2308
11178
426
3949
9260
5252
939
5173
5375
8528
1316
6105
331
11951
162
12032
6721
3469
9462
2016
1291
4436
1401
5269
103
4463
6019
14378
1110
9143
7250
3521
2280
2775
6085
753
70
1603
6387
7526
9797
10486
1886
5298
2609
3448
26...

result:

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

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: 136ms
memory: 27460kb

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
14
2
8
2
10
12
5
2
14
12
1
0
2
14
5
10
31
12
3
6
6
4
3
16
21
5
12
6
7
11
12
3
7
3
6
15
5
4
6
8
15
24
2
5
11
8
16
4
4
12
5
9
22
1
2
5
6
4
1
4
4
3
6
4
18
32
10
2
7
7
5
12
11
8
4
5
10
6
3
16
8
13
8
3
3
8
21
1
2
3
6
14
21
14
9
2
4
2
4
16
20
7
3
5
3
15
16
8
37
7
6
7
9
...

result:

wrong answer 17th lines differ - on the 1st token, expected: '4', found: '5'

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%