#include "mosaic.h"
#include<bits/stdc++.h>
#include <vector>
using namespace std;
vector<int> wow(500001);
vector<int> wut(500001);
int pr1[4][200001];
int pr2[200001][4];
int calc(int l, int r, int d) {
int ans = 0;
ans+=wut[l+d-1]-wut[l-1];
ans-=(wow[l+d-1]-wow[l-1])*(l-1);
ans-=wut[r]-wut[r-d];
ans+=(wow[r]-wow[r-d])*(r+1);
ans+=(wow[r-d]-wow[l+d-1])*d;
return ans;
}
std::vector<long long> mosaic(std::vector<int> x, std::vector<int> y,
std::vector<int> t, std::vector<int> B,
std::vector<int> l, std::vector<int> r) {
int n = x.size();
int q = t.size();
for(int i = 0; i < 4; i++) {
for(int j = 0; j < n+1; j++) {
pr1[i][j] = 0;
pr2[j][i] = 0;
}
}
for(int i = 1; i <= n; i++) {
pr1[1][i] = x[i-1];
if(i <= 3) {
pr2[1][i] = x[i-1];
}
pr2[i][1] = y[i-1];
if(i <= 3) {
pr1[i][1] = y[i-1];
}
}
for(int i = 1; i <= 3; i++) {
for(int j = 2; j <= n; j++) {
if(pr1[i][j-1] == 0 && pr1[i-1][j] == 0) {
pr1[i][j] = 1;
}
if(pr2[j-1][i] == 0 && pr2[j][i-1] == 0) {
pr2[j][i] = 1;
}
}
}
vector<int> troll(2*n+1);
for(int i = 3; i <= n; i++) {
troll[3-i+n] = pr1[3][i];
troll[i-3+n] = pr2[i][3];
}
for(int i = 1; i <= 2*n; i++) {
wow[i] = wow[i-1]+troll[i];
wut[i]+=wut[i-1]+troll[i]*i;
}
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= n; j++) {
pr1[i][j]+=pr1[i-1][j]+pr1[i][j-1]-pr1[i-1][j-1];
pr2[j][i]+=pr2[j-1][i]+pr2[j][i-1]-pr2[j-1][i-1];
}
}
vector<long long> answer(q);
for(int i = 0; i < q; i++) {
int a = t[i]+1,b = B[i]+1,c = l[i]+1,d = r[i]+1;
int ans = 0;
if(a <= 2) {
int x = min(2,b);
ans+=pr1[x][d]-pr1[a-1][d]-pr1[x][c-1]+pr1[a-1][c-1];
a = x+1;
}
if(c <= 2) {
int x = min(2,d);
ans+=pr2[b][x]-pr2[a-1][x]-pr2[b][c-1]+pr2[a-1][c-1];
c = x+1;
}
if(a <= b && c <= d) {
ans+=calc(a-d+n,b-c+n,min(b-a+1,d-c+1));
}
answer[i] = ans;
}
return answer;
}
# | 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... |