QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#553179#9240. Mosaicdalao_see_me#5 135ms25332kbC++144.0kb2024-09-08 10:12:102024-09-08 10:12:12

Judging History

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

  • [2024-09-08 10:12:12]
  • 评测
  • 测评结果:5
  • 用时:135ms
  • 内存:25332kb
  • [2024-09-08 10:12:10]
  • 提交

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));
					lst = p.first + 1;
					c ^= (p.second - 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;
}

詳細信息

Subtask #1:

score: 5
Accepted

Test #1:

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

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

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

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

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

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

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

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

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: 3ms
memory: 14040kb

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

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
Runtime Error

Dependency #1:

100%
Accepted

Test #11:

score: 0
Runtime Error

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:


result:


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: 135ms
memory: 25332kb

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
12
2
7
0
8
4
0
0
14
8
0
0
2
6
1
8
23
7
1
5
3
1
2
8
17
4
10
4
7
7
11
1
5
3
6
14
0
4
5
8
9
20
0
5
10
8
8
0
2
12
2
5
14
1
2
5
2
1
1
3
4
1
6
4
9
20
8
2
7
2
4
5
1
1
2
0
8
6
3
14
4
13
5
3
3
4
17
1
2
2
3
8
9
4
9
2
0
1
2
6
6
6
3
4
0
13
10
8
20
7
2
1
8
1
7
1
2
1
11
3
8
3
9...

result:

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

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%