#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+3, 0LL);
}
}
}
}
return C;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |