#include <map>
#include <numeric>
#include <set>
#include <vector>
using int64 = long long;
std::vector<int64> 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) {
const int n = X.size();
std::set<int> st;
std::map<std::pair<int, int>, int> mp;
for (int i = 0; i < n; ++i) {
mp[{0, i}] = X[i];
mp[{i, 0}] = Y[i];
}
for (int j = 1; j < n; ++j) {
mp[{1, j}] = !mp[{0, j}] && !mp[{1, j - 1}];
}
for (int i = 1; i < n; ++i) {
mp[{i, 1}] = !mp[{i - 1, 1}] && !mp[{i, 0}];
}
for (auto &[pt, y] : mp) {
if (pt.first != 0 and pt.second != 0 and y != 0) {
st.insert(pt.first - pt.second);
}
}
auto get_pt = [&](int x, int y) -> int {
if (x == 0) {
return X[y];
}
if (y == 0) {
return Y[x];
}
return st.contains(x - y);
};
std::vector<int64> ans;
for (int i = 0; i < T.size(); ++i) {
int x1 = T[i], y1 = L[i], x2 = B[i], y2 = R[i];
int64 cur = 0;
for (int u = x1; u <= x2; ++u) {
for (int v = y1; v <= y2; ++v) {
cur += get_pt(u, v);
}
}
ans.push_back(cur);
}
return ans;
}
# | 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... |