#include "mosaic.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;
vi mosaic(vector<int32_t> X, vector<int32_t> Y,
vector<int32_t> T, vector<int32_t> B,
vector<int32_t> L, vector<int32_t> R) {
int N = X.size();
int Q = L.size();
int until = min(N-1,5ll);
vector<vi> rows(until+1,vi(N));
vector<vi> cols(until+1,vi(N));
for (int i = 0;i<N;i++) rows[0][i] = X[i],cols[0][i] = Y[i];
for (int ii = 1;ii<=until;ii++) {
rows[ii][0] = Y[ii];
cols[ii][0] = X[ii];
for (int i = 1;i<N;i++) rows[ii][i] = (!rows[ii][i-1] && !rows[ii-1][i]);
for (int i = 1;i<N;i++) cols[ii][i] = (!cols[ii][i-1] && !cols[ii-1][i]);
}
map<int,int> mp;
for (int i = 1;i<=until;i++) {
for (int j = 1;j<N;j++) {
if (rows[i][j]) {
mp[i-j] = 1;
}
if (cols[i][j]) mp[j-i] = 1;
}
}
for (int i = 0;i<=until;i++) {
for (int j = 1;j<N;j++) rows[i][j] += rows[i][j-1],cols[i][j]+=cols[i][j-1];
}
auto sm = [&](vi& v,int l,int r) -> int {
if (l > r) return 0;
if (!l) return v[r];
return v[r]-v[l-1];
};
vi ansy(Q);
for (int ii = 0;ii<Q;ii++) {
int ans = 0;
while (L[ii] <= until && L[ii] <= R[ii]) {
ans+=sm(cols[L[ii]],T[ii],B[ii]);
L[ii]++;
}
while (T[ii] <= until && T[ii] <= B[ii]) {
ans+=sm(rows[T[ii]],L[ii],R[ii]);
T[ii]++;
}
for (int i = T[ii];i<=B[ii];i++) {
for (int j = L[ii];j<=R[ii];j++) {
ans+=mp[i-j];
}
}
ansy[ii] = ans;
}
return ansy;
}
# | 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... |