#include "rect.h"
#include <vector>
#include <algorithm>
using namespace std;
long long count_rectangles(std::vector<std::vector<int> > A) {
const int inf = 1012345678;
int H = A.size(), W = A[0].size();
vector<vector<int> > TA(W, vector<int>(H));
for(int i = 0; i < H; ++i) {
for(int j = 0; j < W; ++j) {
TA[j][i] = A[i][j];
}
}
vector<vector<bool> > flag_row(H, vector<bool>((W - 1) * (W - 2) / 2));
vector<vector<bool> > flag_col(W, vector<bool>((H - 1) * (H - 2) / 2));
for(int i = 0; i < H; ++i) {
for(int j = 1; j < W; ++j) {
int d = (j - 1) * (j - 2) / 2 - 1;
int mx = -inf;
for(int k = j - 1; k >= 1; --k) {
mx = max(mx, A[i][k]);
flag_row[i][d + k] = (A[i][k - 1] > mx && A[i][j] > mx);
}
}
}
for(int i = 0; i < W; ++i) {
for(int j = 1; j < H; ++j) {
int d = (j - 1) * (j - 2) / 2 - 1;
int mx = -inf;
for(int k = j - 1; k >= 1; --k) {
mx = max(mx, TA[i][k]);
flag_col[i][d + k] = (TA[i][k - 1] > mx && TA[i][j] > mx);
}
}
}
vector<vector<short> > sum_row(H + 1, vector<short>((W - 1) * (W - 2) / 2));
vector<vector<short> > sum_col(W + 1, vector<short>((H - 1) * (H - 2) / 2));
for(int i = 0; i < H; ++i) {
int d = (W - 1) * (W - 2) / 2;
for(int j = 0; j < d; ++j) {
sum_row[i + 1][j] = sum_row[i][j] + flag_row[i][j];
}
}
for(int i = 0; i < W; ++i) {
int d = (H - 1) * (H - 2) / 2;
for(int j = 0; j < d; ++j) {
sum_col[i + 1][j] = sum_col[i][j] + flag_col[i][j];
}
}
long long ans = 0;
for(int xb = 1; xb < H; ++xb) {
int dx = (xb - 1) * (xb - 2) / 2 - 1;
for(int yb = 1; yb < W; ++yb) {
int dy = (yb - 1) * (yb - 2) / 2 - 1;
for(int ya = 1; ya < yb; ++ya) {
int yid = dy + ya;
if(!flag_row[xb - 1][yid]) continue;
// ----- At most N patterns for each xa ----- //
for(int xa = 1; xa < xb; ++xa) {
int xid = dx + xa;
int sr = sum_row[xb][yid] - sum_row[xa][yid];
int sc = sum_col[yb][xid] - sum_col[ya][xid];
if(sr == xb - xa && sc == yb - ya) {
++ans;
}
}
}
}
}
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
416 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
0 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
416 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
0 ms |
288 KB |
Output is correct |
14 |
Correct |
0 ms |
256 KB |
Output is correct |
15 |
Correct |
0 ms |
256 KB |
Output is correct |
16 |
Correct |
0 ms |
256 KB |
Output is correct |
17 |
Correct |
0 ms |
256 KB |
Output is correct |
18 |
Correct |
0 ms |
256 KB |
Output is correct |
19 |
Correct |
1 ms |
384 KB |
Output is correct |
20 |
Correct |
1 ms |
360 KB |
Output is correct |
21 |
Correct |
0 ms |
256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
416 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
0 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
416 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
0 ms |
288 KB |
Output is correct |
14 |
Correct |
0 ms |
256 KB |
Output is correct |
15 |
Correct |
0 ms |
256 KB |
Output is correct |
16 |
Correct |
0 ms |
256 KB |
Output is correct |
17 |
Correct |
4 ms |
1408 KB |
Output is correct |
18 |
Correct |
4 ms |
1408 KB |
Output is correct |
19 |
Correct |
4 ms |
1408 KB |
Output is correct |
20 |
Correct |
4 ms |
1384 KB |
Output is correct |
21 |
Correct |
4 ms |
1440 KB |
Output is correct |
22 |
Correct |
5 ms |
1440 KB |
Output is correct |
23 |
Correct |
5 ms |
1408 KB |
Output is correct |
24 |
Correct |
2 ms |
768 KB |
Output is correct |
25 |
Correct |
0 ms |
256 KB |
Output is correct |
26 |
Correct |
0 ms |
256 KB |
Output is correct |
27 |
Correct |
1 ms |
384 KB |
Output is correct |
28 |
Correct |
1 ms |
360 KB |
Output is correct |
29 |
Correct |
0 ms |
256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
416 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
0 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
416 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
0 ms |
288 KB |
Output is correct |
14 |
Correct |
0 ms |
256 KB |
Output is correct |
15 |
Correct |
0 ms |
256 KB |
Output is correct |
16 |
Correct |
0 ms |
256 KB |
Output is correct |
17 |
Correct |
4 ms |
1408 KB |
Output is correct |
18 |
Correct |
4 ms |
1408 KB |
Output is correct |
19 |
Correct |
4 ms |
1408 KB |
Output is correct |
20 |
Correct |
4 ms |
1384 KB |
Output is correct |
21 |
Correct |
4 ms |
1440 KB |
Output is correct |
22 |
Correct |
5 ms |
1440 KB |
Output is correct |
23 |
Correct |
5 ms |
1408 KB |
Output is correct |
24 |
Correct |
2 ms |
768 KB |
Output is correct |
25 |
Correct |
60 ms |
17272 KB |
Output is correct |
26 |
Correct |
61 ms |
17280 KB |
Output is correct |
27 |
Correct |
63 ms |
17272 KB |
Output is correct |
28 |
Correct |
61 ms |
17272 KB |
Output is correct |
29 |
Correct |
84 ms |
17272 KB |
Output is correct |
30 |
Correct |
80 ms |
17272 KB |
Output is correct |
31 |
Correct |
70 ms |
17528 KB |
Output is correct |
32 |
Correct |
65 ms |
17016 KB |
Output is correct |
33 |
Correct |
0 ms |
256 KB |
Output is correct |
34 |
Correct |
0 ms |
256 KB |
Output is correct |
35 |
Correct |
1 ms |
384 KB |
Output is correct |
36 |
Correct |
1 ms |
360 KB |
Output is correct |
37 |
Correct |
0 ms |
256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
416 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
0 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
416 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
0 ms |
288 KB |
Output is correct |
14 |
Correct |
0 ms |
256 KB |
Output is correct |
15 |
Correct |
0 ms |
256 KB |
Output is correct |
16 |
Correct |
0 ms |
256 KB |
Output is correct |
17 |
Correct |
4 ms |
1408 KB |
Output is correct |
18 |
Correct |
4 ms |
1408 KB |
Output is correct |
19 |
Correct |
4 ms |
1408 KB |
Output is correct |
20 |
Correct |
4 ms |
1384 KB |
Output is correct |
21 |
Correct |
4 ms |
1440 KB |
Output is correct |
22 |
Correct |
5 ms |
1440 KB |
Output is correct |
23 |
Correct |
5 ms |
1408 KB |
Output is correct |
24 |
Correct |
2 ms |
768 KB |
Output is correct |
25 |
Correct |
60 ms |
17272 KB |
Output is correct |
26 |
Correct |
61 ms |
17280 KB |
Output is correct |
27 |
Correct |
63 ms |
17272 KB |
Output is correct |
28 |
Correct |
61 ms |
17272 KB |
Output is correct |
29 |
Correct |
84 ms |
17272 KB |
Output is correct |
30 |
Correct |
80 ms |
17272 KB |
Output is correct |
31 |
Correct |
70 ms |
17528 KB |
Output is correct |
32 |
Correct |
65 ms |
17016 KB |
Output is correct |
33 |
Correct |
3329 ms |
720408 KB |
Output is correct |
34 |
Correct |
4274 ms |
720404 KB |
Output is correct |
35 |
Correct |
2689 ms |
720536 KB |
Output is correct |
36 |
Correct |
3175 ms |
720408 KB |
Output is correct |
37 |
Correct |
3833 ms |
723732 KB |
Output is correct |
38 |
Correct |
3008 ms |
722848 KB |
Output is correct |
39 |
Correct |
3800 ms |
724120 KB |
Output is correct |
40 |
Correct |
3385 ms |
654616 KB |
Output is correct |
41 |
Correct |
3013 ms |
721468 KB |
Output is correct |
42 |
Correct |
3395 ms |
721428 KB |
Output is correct |
43 |
Correct |
4723 ms |
722332 KB |
Output is correct |
44 |
Correct |
4737 ms |
724200 KB |
Output is correct |
45 |
Correct |
1630 ms |
273528 KB |
Output is correct |
46 |
Correct |
1478 ms |
273016 KB |
Output is correct |
47 |
Correct |
4623 ms |
723144 KB |
Output is correct |
48 |
Correct |
4549 ms |
724068 KB |
Output is correct |
49 |
Correct |
0 ms |
256 KB |
Output is correct |
50 |
Correct |
0 ms |
256 KB |
Output is correct |
51 |
Correct |
1 ms |
384 KB |
Output is correct |
52 |
Correct |
1 ms |
360 KB |
Output is correct |
53 |
Correct |
0 ms |
256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
76 ms |
32372 KB |
Output is correct |
2 |
Correct |
54 ms |
23396 KB |
Output is correct |
3 |
Correct |
73 ms |
32472 KB |
Output is correct |
4 |
Correct |
0 ms |
256 KB |
Output is correct |
5 |
Correct |
75 ms |
32376 KB |
Output is correct |
6 |
Correct |
75 ms |
32372 KB |
Output is correct |
7 |
Correct |
78 ms |
32376 KB |
Output is correct |
8 |
Correct |
74 ms |
32376 KB |
Output is correct |
9 |
Correct |
74 ms |
32376 KB |
Output is correct |
10 |
Correct |
30 ms |
19328 KB |
Output is correct |
11 |
Correct |
51 ms |
25844 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Execution timed out |
5105 ms |
660528 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
256 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
416 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
0 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
416 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
0 ms |
288 KB |
Output is correct |
14 |
Correct |
0 ms |
256 KB |
Output is correct |
15 |
Correct |
0 ms |
256 KB |
Output is correct |
16 |
Correct |
0 ms |
256 KB |
Output is correct |
17 |
Correct |
4 ms |
1408 KB |
Output is correct |
18 |
Correct |
4 ms |
1408 KB |
Output is correct |
19 |
Correct |
4 ms |
1408 KB |
Output is correct |
20 |
Correct |
4 ms |
1384 KB |
Output is correct |
21 |
Correct |
4 ms |
1440 KB |
Output is correct |
22 |
Correct |
5 ms |
1440 KB |
Output is correct |
23 |
Correct |
5 ms |
1408 KB |
Output is correct |
24 |
Correct |
2 ms |
768 KB |
Output is correct |
25 |
Correct |
60 ms |
17272 KB |
Output is correct |
26 |
Correct |
61 ms |
17280 KB |
Output is correct |
27 |
Correct |
63 ms |
17272 KB |
Output is correct |
28 |
Correct |
61 ms |
17272 KB |
Output is correct |
29 |
Correct |
84 ms |
17272 KB |
Output is correct |
30 |
Correct |
80 ms |
17272 KB |
Output is correct |
31 |
Correct |
70 ms |
17528 KB |
Output is correct |
32 |
Correct |
65 ms |
17016 KB |
Output is correct |
33 |
Correct |
3329 ms |
720408 KB |
Output is correct |
34 |
Correct |
4274 ms |
720404 KB |
Output is correct |
35 |
Correct |
2689 ms |
720536 KB |
Output is correct |
36 |
Correct |
3175 ms |
720408 KB |
Output is correct |
37 |
Correct |
3833 ms |
723732 KB |
Output is correct |
38 |
Correct |
3008 ms |
722848 KB |
Output is correct |
39 |
Correct |
3800 ms |
724120 KB |
Output is correct |
40 |
Correct |
3385 ms |
654616 KB |
Output is correct |
41 |
Correct |
3013 ms |
721468 KB |
Output is correct |
42 |
Correct |
3395 ms |
721428 KB |
Output is correct |
43 |
Correct |
4723 ms |
722332 KB |
Output is correct |
44 |
Correct |
4737 ms |
724200 KB |
Output is correct |
45 |
Correct |
1630 ms |
273528 KB |
Output is correct |
46 |
Correct |
1478 ms |
273016 KB |
Output is correct |
47 |
Correct |
4623 ms |
723144 KB |
Output is correct |
48 |
Correct |
4549 ms |
724068 KB |
Output is correct |
49 |
Correct |
76 ms |
32372 KB |
Output is correct |
50 |
Correct |
54 ms |
23396 KB |
Output is correct |
51 |
Correct |
73 ms |
32472 KB |
Output is correct |
52 |
Correct |
0 ms |
256 KB |
Output is correct |
53 |
Correct |
75 ms |
32376 KB |
Output is correct |
54 |
Correct |
75 ms |
32372 KB |
Output is correct |
55 |
Correct |
78 ms |
32376 KB |
Output is correct |
56 |
Correct |
74 ms |
32376 KB |
Output is correct |
57 |
Correct |
74 ms |
32376 KB |
Output is correct |
58 |
Correct |
30 ms |
19328 KB |
Output is correct |
59 |
Correct |
51 ms |
25844 KB |
Output is correct |
60 |
Correct |
0 ms |
256 KB |
Output is correct |
61 |
Execution timed out |
5105 ms |
660528 KB |
Time limit exceeded |
62 |
Halted |
0 ms |
0 KB |
- |