제출 #1321338

#제출 시각아이디문제언어결과실행 시간메모리
1321338unknown모자이크 (IOI24_mosaic)C++20
0 / 100
1095 ms11440 KiB
#include <bits/stdc++.h>
using namespace std;
vector<long long> mosaic(vector<int> X, vector<int> Y, vector<int> T, vector<int> B, vector<int> L, vector<int> R) {
	int Q = T.size();
	vector<long long> C(Q);
	int N = X.size();
	vector<bool> X1(N), X2(N), Y1(N), Y2(N);
	if (N != 1) {
		X1[0] = Y[1]; Y1[0] = X[1];
		for (int i = 1; i < N; i++) {
			X1[i] = !(X1[i-1]||X[i]);
			Y1[i] = !(Y1[i-1]||Y[i]);
		}
		if (N != 2) {
			X2[0] = Y[2]; Y2[0] = X[2]; X2[1] = Y1[2]; Y2[1] = X1[2];
			for (int i = 2; i < N; i++) {
				X2[i] = !(X2[i-1]||X1[i]);
				Y2[i] = !(Y2[i-1]||Y1[i]);
			}
		}
	}
	int y, x1, x2;
	for (int i = 0; i < Q; i++) {
		y = T[i]; x1 = L[i]; x2 = R[i];
		if(y==0){C[i]=accumulate(X.begin()+x1, X.begin()+x2+1, 0LL);}
		else if(y==1){C[i]=accumulate(X1.begin()+x1, X1.begin()+x2+1, 0LL);}
		else {
			if (x2 <= 1) {
				if (x1 == 0) {
					C[i] += Y[y];
				}
				if (x2 == 1) {
					C[i] += Y1[y];
				}
			} else {
				if (x1 == 0) {
					C[i] += Y[y];
					x1++;
				}
				if (x1 == 1) {
					C[i] += Y1[y];
					x1++;
				}
				if (x1 <= y) {
					C[i] += accumulate(Y2.begin()+max(2, y-x2+2), Y2.begin()+y-x1+3, 0LL);
				}
				if (x2 > y) {
					C[i] += accumulate(X2.begin()+max(3, x1-y+2), X2.begin()+x2-y+2, 0LL);
				}
			}
		}
	}
	return C;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...