This documentation is automatically generated by competitive-verifier/competitive-verifier
// clang-format off
// competitive-verifier: PROBLEM http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0560
// clang-format on
#include <iostream>
#include <string>
#include <vector>
#include "../../dp/cumulative-sum-2d.hpp"
using namespace std;
int main() {
int N, M, Q;
cin >> N >> M >> Q;
vector<CumulativeSum2D<int> > sum(3, CumulativeSum2D<int>(N, M));
const string P = "JOI";
for (int i = 0; i < N; i++) {
string s;
cin >> s;
for (int j = 0; j < M; j++) {
for (int k = 0; k < 3; k++) {
sum[k].add(i, j, s[j] == P[k]);
}
}
}
for (int k = 0; k < 3; k++) {
sum[k].build();
}
while (Q--) {
int a, b, c, d;
cin >> a >> b >> c >> d;
--a, --b;
vector<int> v(3);
for (int k = 0; k < 3; k++) {
v[k] = sum[k].query(a, b, c, d);
}
cout << v[0] << ' ' << v[1] << ' ' << v[2] << "\n";
}
}
#line 1 "test/verify/aoj-0560.test.cpp"
// clang-format off
// competitive-verifier: PROBLEM http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0560
// clang-format on
#include <iostream>
#include <string>
#include <vector>
#line 2 "dp/cumulative-sum-2d.hpp"
#line 4 "dp/cumulative-sum-2d.hpp"
template <class T>
struct CumulativeSum2D {
std::vector<std::vector<T> > data;
CumulativeSum2D(int W, int H) : data(W + 1, std::vector<T>(H + 1, 0)) {}
void add(int x, int y, T z) {
++x, ++y;
if (x >= data.size() || y >= data[0].size()) return;
data[x][y] += z;
}
void build() {
for (int i = 1; i < data.size(); i++) {
for (int j = 1; j < data[i].size(); j++) {
data[i][j] += data[i][j - 1] + data[i - 1][j] - data[i - 1][j - 1];
}
}
}
T query(int sx, int sy, int gx, int gy) const {
return (data[gx][gy] - data[sx][gy] - data[gx][sy] + data[sx][sy]);
}
};
#line 10 "test/verify/aoj-0560.test.cpp"
using namespace std;
int main() {
int N, M, Q;
cin >> N >> M >> Q;
vector<CumulativeSum2D<int> > sum(3, CumulativeSum2D<int>(N, M));
const string P = "JOI";
for (int i = 0; i < N; i++) {
string s;
cin >> s;
for (int j = 0; j < M; j++) {
for (int k = 0; k < 3; k++) {
sum[k].add(i, j, s[j] == P[k]);
}
}
}
for (int k = 0; k < 3; k++) {
sum[k].build();
}
while (Q--) {
int a, b, c, d;
cin >> a >> b >> c >> d;
--a, --b;
vector<int> v(3);
for (int k = 0; k < 3; k++) {
v[k] = sum[k].query(a, b, c, d);
}
cout << v[0] << ' ' << v[1] << ' ' << v[2] << "\n";
}
}
| Env | Name | Status | Elapsed | Memory |
|---|---|---|---|---|
| g++ | testcase_00 |
|
2 ms | 4 MB |
| g++ | testcase_01 |
|
2 ms | 4 MB |
| g++ | testcase_02 |
|
3 ms | 4 MB |
| g++ | testcase_03 |
|
65 ms | 4 MB |
| g++ | testcase_04 |
|
99 ms | 4 MB |
| g++ | testcase_05 |
|
119 ms | 18 MB |
| g++ | testcase_06 |
|
125 ms | 19 MB |
| g++ | testcase_07 |
|
132 ms | 19 MB |
| g++ | testcase_08 |
|
134 ms | 19 MB |
| g++ | testcase_09 |
|
130 ms | 19 MB |
| clang++ | testcase_00 |
|
2 ms | 4 MB |
| clang++ | testcase_01 |
|
2 ms | 4 MB |
| clang++ | testcase_02 |
|
2 ms | 4 MB |
| clang++ | testcase_03 |
|
73 ms | 4 MB |
| clang++ | testcase_04 |
|
78 ms | 4 MB |
| clang++ | testcase_05 |
|
106 ms | 18 MB |
| clang++ | testcase_06 |
|
116 ms | 19 MB |
| clang++ | testcase_07 |
|
132 ms | 19 MB |
| clang++ | testcase_08 |
|
127 ms | 19 MB |
| clang++ | testcase_09 |
|
126 ms | 19 MB |