#include "rect.h"
#include<bits/stdc++.h>
#define all(v) v.begin(),v.end()
using ll = long long;
using namespace std;
const int n_ = 2501;
using P = pair<int, int>;
ll n, m, k, tc = 1, a, b, c, d, sum, x, y, z, base, ans, q;
short R[n_][n_], U[n_][n_], D[n_][n_], L[n_][n_];
vector<short>row[n_][n_];
vector<int>idx[n_][n_];
short tree_[n_];
short f(short l, short r) {
r++;
short ret = 0;
for (; l; l -= (l & -l))ret -= tree_[l];
for (; r; r -= (r & -r))ret += tree_[r];
return ret;
}
void update(short i, short val) {
i++;
for (; i <= max(n, m); i += i & -i)tree_[i] += val;
}
int get(short x, short y) {
return x * n_+ y;
}
long long count_rectangles(std::vector<std::vector<int> > arr) {
ll ret = 0;
n = arr.size();
m = arr[0].size();
for (int i = 0; i < n; i++) {
stack<P>A, B;
A.push({ arr[i][0],0 });
B.push({ arr[i][m - 1],m - 1 });
for (int j = 1; j < m; j++) {
while (A.size() && A.top().first <= arr[i][j])A.pop();
if (A.empty())L[i][j] = -1;
else L[i][j] = A.top().second;
A.push({ arr[i][j],j });
while (B.size() && B.top().first <= arr[i][m - 1 - j])B.pop();
if (B.empty())R[i][m - 1 - j] = -1;
else R[i][m - 1 - j] = B.top().second;
B.push({ arr[i][m - 1 - j],m - 1 - j });
}
}
for (int i = 0; i < m; i++) {
stack<P>A, B;
A.push({ arr[0][i],0 });
B.push({ arr[n - 1][i],n - 1 });
for (int j = 1; j < n; j++) {
while (A.size() && A.top().first <= arr[j][i])A.pop();
if (A.empty())U[j][i] = -1;
else U[j][i] = A.top().second;
A.push({ arr[j][i],j });
while (B.size() && B.top().first <= arr[n - 1 - j][i])B.pop();
if (B.empty())D[n - 1 - j][i] = -1;
else D[n - 1 - j][i] = B.top().second;
B.push({ arr[n - 1 - j][i],n - 1 - j });
}
}
vector<P>query;
for (int j = 1; j + 1 < m; j++)
for (int i = 1; i + 1 < n; i++) {
if (D[i][j] == -1 || U[i][j] == -1)continue;
if (row[U[i][j]][D[i][j]].size() && row[U[i][j]][D[i][j]].back() == j)continue;
row[U[i][j]][D[i][j]].push_back(j);
if (L[i][j] != -1 && R[i][j] != -1) {
query.push_back({get(L[i][j],R[i][j]),get(U[i][j],D[i][j]) });
}
}
sort(all(query));
query.erase(unique(query.begin(), query.end()), query.end());
int cnt = 0;
for (auto nxt : query) {
idx[nxt.second/n_][nxt.second%n_].push_back(cnt);
cnt++;
}
assert(cnt <= n * m);
vector<int>now(cnt + 1);
for (int i = 0; i < n; i++)
for (int j = i + 2; j < n; j++) {
for (auto nxt : row[i][j])update(nxt, 1);
for (auto nxt : idx[i][j]) {
ll l = query[nxt].first/n_, r = query[nxt].first%n_;
int len = f(l + 1, r - 1);
if (len == r - l - 1)now[nxt]++;
}
for (auto nxt : row[i][j])update(nxt, -1);
row[i][j].clear();
idx[i][j].clear();
}
cnt = 0;
for (auto nxt : query) {
if (now[cnt] == 0) {
cnt++;
continue;
}
idx[nxt.first / n_][nxt.first % n_].push_back(cnt);
cnt++;
}
for (int i = 1; i + 1 < n; i++)
for (int j = 1; j + 1 < m; j++) {
if (L[i][j] == -1 || R[i][j] == -1)continue;
if (row[L[i][j]][R[i][j]].size() && row[L[i][j]][R[i][j]].back() == i)continue;
row[L[i][j]][R[i][j]].push_back(i);
}
for (int i = 0; i < m; i++)
for (int j = i + 2; j < m; j++) {
for (auto nxt : row[i][j])update(nxt, 1);
for (auto nxt : idx[i][j]) {
ll l = query[nxt].second/n_, r = query[nxt].second%n_;
int len = f(l + 1, r - 1);
if (len == r - l - 1)ret++;
}
for (auto nxt : row[i][j])update(nxt, -1);
}
return ret;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
294184 KB |
Output is correct |
2 |
Correct |
133 ms |
294544 KB |
Output is correct |
3 |
Correct |
133 ms |
294500 KB |
Output is correct |
4 |
Correct |
137 ms |
294608 KB |
Output is correct |
5 |
Correct |
135 ms |
294584 KB |
Output is correct |
6 |
Correct |
134 ms |
294612 KB |
Output is correct |
7 |
Correct |
134 ms |
294512 KB |
Output is correct |
8 |
Correct |
131 ms |
294188 KB |
Output is correct |
9 |
Correct |
136 ms |
294492 KB |
Output is correct |
10 |
Correct |
132 ms |
294552 KB |
Output is correct |
11 |
Correct |
136 ms |
294504 KB |
Output is correct |
12 |
Correct |
133 ms |
294596 KB |
Output is correct |
13 |
Correct |
133 ms |
294056 KB |
Output is correct |
14 |
Correct |
140 ms |
294132 KB |
Output is correct |
15 |
Correct |
137 ms |
294144 KB |
Output is correct |
16 |
Correct |
139 ms |
294020 KB |
Output is correct |
17 |
Correct |
135 ms |
294032 KB |
Output is correct |
18 |
Correct |
141 ms |
294016 KB |
Output is correct |
19 |
Correct |
133 ms |
294472 KB |
Output is correct |
20 |
Correct |
132 ms |
294476 KB |
Output is correct |
21 |
Correct |
135 ms |
294220 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
294184 KB |
Output is correct |
2 |
Correct |
133 ms |
294544 KB |
Output is correct |
3 |
Correct |
133 ms |
294500 KB |
Output is correct |
4 |
Correct |
137 ms |
294608 KB |
Output is correct |
5 |
Correct |
135 ms |
294584 KB |
Output is correct |
6 |
Correct |
134 ms |
294612 KB |
Output is correct |
7 |
Correct |
134 ms |
294512 KB |
Output is correct |
8 |
Correct |
131 ms |
294188 KB |
Output is correct |
9 |
Correct |
136 ms |
294492 KB |
Output is correct |
10 |
Correct |
132 ms |
294552 KB |
Output is correct |
11 |
Correct |
136 ms |
294504 KB |
Output is correct |
12 |
Correct |
133 ms |
294596 KB |
Output is correct |
13 |
Correct |
133 ms |
294056 KB |
Output is correct |
14 |
Correct |
140 ms |
294132 KB |
Output is correct |
15 |
Correct |
137 ms |
294144 KB |
Output is correct |
16 |
Correct |
139 ms |
294020 KB |
Output is correct |
17 |
Correct |
135 ms |
294032 KB |
Output is correct |
18 |
Correct |
141 ms |
294016 KB |
Output is correct |
19 |
Correct |
133 ms |
294472 KB |
Output is correct |
20 |
Correct |
132 ms |
294476 KB |
Output is correct |
21 |
Correct |
135 ms |
294220 KB |
Output is correct |
22 |
Correct |
134 ms |
295560 KB |
Output is correct |
23 |
Correct |
142 ms |
295524 KB |
Output is correct |
24 |
Correct |
134 ms |
295508 KB |
Output is correct |
25 |
Correct |
137 ms |
295476 KB |
Output is correct |
26 |
Correct |
152 ms |
295532 KB |
Output is correct |
27 |
Correct |
146 ms |
295584 KB |
Output is correct |
28 |
Correct |
149 ms |
295536 KB |
Output is correct |
29 |
Correct |
138 ms |
295392 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
294184 KB |
Output is correct |
2 |
Correct |
133 ms |
294544 KB |
Output is correct |
3 |
Correct |
133 ms |
294500 KB |
Output is correct |
4 |
Correct |
137 ms |
294608 KB |
Output is correct |
5 |
Correct |
135 ms |
294584 KB |
Output is correct |
6 |
Correct |
134 ms |
294612 KB |
Output is correct |
7 |
Correct |
134 ms |
294512 KB |
Output is correct |
8 |
Correct |
131 ms |
294188 KB |
Output is correct |
9 |
Correct |
136 ms |
294492 KB |
Output is correct |
10 |
Correct |
132 ms |
294552 KB |
Output is correct |
11 |
Correct |
136 ms |
294504 KB |
Output is correct |
12 |
Correct |
133 ms |
294596 KB |
Output is correct |
13 |
Correct |
133 ms |
294056 KB |
Output is correct |
14 |
Correct |
140 ms |
294132 KB |
Output is correct |
15 |
Correct |
137 ms |
294144 KB |
Output is correct |
16 |
Correct |
139 ms |
294020 KB |
Output is correct |
17 |
Correct |
134 ms |
295560 KB |
Output is correct |
18 |
Correct |
142 ms |
295524 KB |
Output is correct |
19 |
Correct |
134 ms |
295508 KB |
Output is correct |
20 |
Correct |
137 ms |
295476 KB |
Output is correct |
21 |
Correct |
152 ms |
295532 KB |
Output is correct |
22 |
Correct |
146 ms |
295584 KB |
Output is correct |
23 |
Correct |
149 ms |
295536 KB |
Output is correct |
24 |
Correct |
138 ms |
295392 KB |
Output is correct |
25 |
Correct |
135 ms |
294032 KB |
Output is correct |
26 |
Correct |
141 ms |
294016 KB |
Output is correct |
27 |
Correct |
133 ms |
294472 KB |
Output is correct |
28 |
Correct |
132 ms |
294476 KB |
Output is correct |
29 |
Correct |
135 ms |
294220 KB |
Output is correct |
30 |
Correct |
152 ms |
298616 KB |
Output is correct |
31 |
Correct |
164 ms |
298656 KB |
Output is correct |
32 |
Correct |
155 ms |
298704 KB |
Output is correct |
33 |
Correct |
166 ms |
298180 KB |
Output is correct |
34 |
Correct |
150 ms |
299028 KB |
Output is correct |
35 |
Correct |
151 ms |
298876 KB |
Output is correct |
36 |
Correct |
148 ms |
298760 KB |
Output is correct |
37 |
Correct |
159 ms |
298796 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
294184 KB |
Output is correct |
2 |
Correct |
133 ms |
294544 KB |
Output is correct |
3 |
Correct |
133 ms |
294500 KB |
Output is correct |
4 |
Correct |
137 ms |
294608 KB |
Output is correct |
5 |
Correct |
135 ms |
294584 KB |
Output is correct |
6 |
Correct |
134 ms |
294612 KB |
Output is correct |
7 |
Correct |
134 ms |
294512 KB |
Output is correct |
8 |
Correct |
131 ms |
294188 KB |
Output is correct |
9 |
Correct |
136 ms |
294492 KB |
Output is correct |
10 |
Correct |
132 ms |
294552 KB |
Output is correct |
11 |
Correct |
136 ms |
294504 KB |
Output is correct |
12 |
Correct |
133 ms |
294596 KB |
Output is correct |
13 |
Correct |
133 ms |
294056 KB |
Output is correct |
14 |
Correct |
140 ms |
294132 KB |
Output is correct |
15 |
Correct |
137 ms |
294144 KB |
Output is correct |
16 |
Correct |
139 ms |
294020 KB |
Output is correct |
17 |
Correct |
134 ms |
295560 KB |
Output is correct |
18 |
Correct |
142 ms |
295524 KB |
Output is correct |
19 |
Correct |
134 ms |
295508 KB |
Output is correct |
20 |
Correct |
137 ms |
295476 KB |
Output is correct |
21 |
Correct |
152 ms |
295532 KB |
Output is correct |
22 |
Correct |
146 ms |
295584 KB |
Output is correct |
23 |
Correct |
149 ms |
295536 KB |
Output is correct |
24 |
Correct |
138 ms |
295392 KB |
Output is correct |
25 |
Correct |
152 ms |
298616 KB |
Output is correct |
26 |
Correct |
164 ms |
298656 KB |
Output is correct |
27 |
Correct |
155 ms |
298704 KB |
Output is correct |
28 |
Correct |
166 ms |
298180 KB |
Output is correct |
29 |
Correct |
150 ms |
299028 KB |
Output is correct |
30 |
Correct |
151 ms |
298876 KB |
Output is correct |
31 |
Correct |
148 ms |
298760 KB |
Output is correct |
32 |
Correct |
159 ms |
298796 KB |
Output is correct |
33 |
Correct |
135 ms |
294032 KB |
Output is correct |
34 |
Correct |
141 ms |
294016 KB |
Output is correct |
35 |
Correct |
133 ms |
294472 KB |
Output is correct |
36 |
Correct |
132 ms |
294476 KB |
Output is correct |
37 |
Correct |
135 ms |
294220 KB |
Output is correct |
38 |
Correct |
226 ms |
319328 KB |
Output is correct |
39 |
Correct |
231 ms |
319368 KB |
Output is correct |
40 |
Correct |
212 ms |
319260 KB |
Output is correct |
41 |
Correct |
224 ms |
319308 KB |
Output is correct |
42 |
Correct |
301 ms |
321656 KB |
Output is correct |
43 |
Correct |
285 ms |
325836 KB |
Output is correct |
44 |
Correct |
283 ms |
321772 KB |
Output is correct |
45 |
Correct |
276 ms |
324016 KB |
Output is correct |
46 |
Correct |
225 ms |
314276 KB |
Output is correct |
47 |
Correct |
257 ms |
315816 KB |
Output is correct |
48 |
Correct |
374 ms |
322804 KB |
Output is correct |
49 |
Correct |
369 ms |
322984 KB |
Output is correct |
50 |
Correct |
258 ms |
315524 KB |
Output is correct |
51 |
Correct |
243 ms |
309304 KB |
Output is correct |
52 |
Correct |
344 ms |
321060 KB |
Output is correct |
53 |
Correct |
340 ms |
321088 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
147 ms |
294424 KB |
Output is correct |
2 |
Correct |
147 ms |
294300 KB |
Output is correct |
3 |
Correct |
151 ms |
294160 KB |
Output is correct |
4 |
Correct |
145 ms |
294092 KB |
Output is correct |
5 |
Correct |
146 ms |
294288 KB |
Output is correct |
6 |
Correct |
145 ms |
294308 KB |
Output is correct |
7 |
Correct |
148 ms |
294264 KB |
Output is correct |
8 |
Correct |
144 ms |
294300 KB |
Output is correct |
9 |
Correct |
146 ms |
294300 KB |
Output is correct |
10 |
Correct |
152 ms |
294044 KB |
Output is correct |
11 |
Correct |
181 ms |
294160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
135 ms |
294032 KB |
Output is correct |
2 |
Correct |
141 ms |
294016 KB |
Output is correct |
3 |
Correct |
133 ms |
294472 KB |
Output is correct |
4 |
Correct |
132 ms |
294476 KB |
Output is correct |
5 |
Correct |
135 ms |
294220 KB |
Output is correct |
6 |
Correct |
135 ms |
294216 KB |
Output is correct |
7 |
Correct |
737 ms |
356664 KB |
Output is correct |
8 |
Correct |
1499 ms |
423200 KB |
Output is correct |
9 |
Correct |
1536 ms |
423688 KB |
Output is correct |
10 |
Correct |
1518 ms |
423884 KB |
Output is correct |
11 |
Correct |
406 ms |
342472 KB |
Output is correct |
12 |
Correct |
650 ms |
389068 KB |
Output is correct |
13 |
Correct |
668 ms |
392100 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
136 ms |
294184 KB |
Output is correct |
2 |
Correct |
133 ms |
294544 KB |
Output is correct |
3 |
Correct |
133 ms |
294500 KB |
Output is correct |
4 |
Correct |
137 ms |
294608 KB |
Output is correct |
5 |
Correct |
135 ms |
294584 KB |
Output is correct |
6 |
Correct |
134 ms |
294612 KB |
Output is correct |
7 |
Correct |
134 ms |
294512 KB |
Output is correct |
8 |
Correct |
131 ms |
294188 KB |
Output is correct |
9 |
Correct |
136 ms |
294492 KB |
Output is correct |
10 |
Correct |
132 ms |
294552 KB |
Output is correct |
11 |
Correct |
136 ms |
294504 KB |
Output is correct |
12 |
Correct |
133 ms |
294596 KB |
Output is correct |
13 |
Correct |
133 ms |
294056 KB |
Output is correct |
14 |
Correct |
140 ms |
294132 KB |
Output is correct |
15 |
Correct |
137 ms |
294144 KB |
Output is correct |
16 |
Correct |
139 ms |
294020 KB |
Output is correct |
17 |
Correct |
134 ms |
295560 KB |
Output is correct |
18 |
Correct |
142 ms |
295524 KB |
Output is correct |
19 |
Correct |
134 ms |
295508 KB |
Output is correct |
20 |
Correct |
137 ms |
295476 KB |
Output is correct |
21 |
Correct |
152 ms |
295532 KB |
Output is correct |
22 |
Correct |
146 ms |
295584 KB |
Output is correct |
23 |
Correct |
149 ms |
295536 KB |
Output is correct |
24 |
Correct |
138 ms |
295392 KB |
Output is correct |
25 |
Correct |
152 ms |
298616 KB |
Output is correct |
26 |
Correct |
164 ms |
298656 KB |
Output is correct |
27 |
Correct |
155 ms |
298704 KB |
Output is correct |
28 |
Correct |
166 ms |
298180 KB |
Output is correct |
29 |
Correct |
150 ms |
299028 KB |
Output is correct |
30 |
Correct |
151 ms |
298876 KB |
Output is correct |
31 |
Correct |
148 ms |
298760 KB |
Output is correct |
32 |
Correct |
159 ms |
298796 KB |
Output is correct |
33 |
Correct |
226 ms |
319328 KB |
Output is correct |
34 |
Correct |
231 ms |
319368 KB |
Output is correct |
35 |
Correct |
212 ms |
319260 KB |
Output is correct |
36 |
Correct |
224 ms |
319308 KB |
Output is correct |
37 |
Correct |
301 ms |
321656 KB |
Output is correct |
38 |
Correct |
285 ms |
325836 KB |
Output is correct |
39 |
Correct |
283 ms |
321772 KB |
Output is correct |
40 |
Correct |
276 ms |
324016 KB |
Output is correct |
41 |
Correct |
225 ms |
314276 KB |
Output is correct |
42 |
Correct |
257 ms |
315816 KB |
Output is correct |
43 |
Correct |
374 ms |
322804 KB |
Output is correct |
44 |
Correct |
369 ms |
322984 KB |
Output is correct |
45 |
Correct |
258 ms |
315524 KB |
Output is correct |
46 |
Correct |
243 ms |
309304 KB |
Output is correct |
47 |
Correct |
344 ms |
321060 KB |
Output is correct |
48 |
Correct |
340 ms |
321088 KB |
Output is correct |
49 |
Correct |
147 ms |
294424 KB |
Output is correct |
50 |
Correct |
147 ms |
294300 KB |
Output is correct |
51 |
Correct |
151 ms |
294160 KB |
Output is correct |
52 |
Correct |
145 ms |
294092 KB |
Output is correct |
53 |
Correct |
146 ms |
294288 KB |
Output is correct |
54 |
Correct |
145 ms |
294308 KB |
Output is correct |
55 |
Correct |
148 ms |
294264 KB |
Output is correct |
56 |
Correct |
144 ms |
294300 KB |
Output is correct |
57 |
Correct |
146 ms |
294300 KB |
Output is correct |
58 |
Correct |
152 ms |
294044 KB |
Output is correct |
59 |
Correct |
181 ms |
294160 KB |
Output is correct |
60 |
Correct |
135 ms |
294216 KB |
Output is correct |
61 |
Correct |
737 ms |
356664 KB |
Output is correct |
62 |
Correct |
1499 ms |
423200 KB |
Output is correct |
63 |
Correct |
1536 ms |
423688 KB |
Output is correct |
64 |
Correct |
1518 ms |
423884 KB |
Output is correct |
65 |
Correct |
406 ms |
342472 KB |
Output is correct |
66 |
Correct |
650 ms |
389068 KB |
Output is correct |
67 |
Correct |
668 ms |
392100 KB |
Output is correct |
68 |
Correct |
135 ms |
294032 KB |
Output is correct |
69 |
Correct |
141 ms |
294016 KB |
Output is correct |
70 |
Correct |
133 ms |
294472 KB |
Output is correct |
71 |
Correct |
132 ms |
294476 KB |
Output is correct |
72 |
Correct |
135 ms |
294220 KB |
Output is correct |
73 |
Correct |
1674 ms |
489948 KB |
Output is correct |
74 |
Correct |
1746 ms |
490016 KB |
Output is correct |
75 |
Correct |
1257 ms |
490064 KB |
Output is correct |
76 |
Correct |
1202 ms |
489928 KB |
Output is correct |
77 |
Correct |
2623 ms |
522996 KB |
Output is correct |
78 |
Correct |
2226 ms |
440680 KB |
Output is correct |
79 |
Correct |
2470 ms |
470580 KB |
Output is correct |
80 |
Correct |
3727 ms |
525372 KB |
Output is correct |
81 |
Correct |
2392 ms |
471396 KB |
Output is correct |
82 |
Correct |
3563 ms |
536684 KB |
Output is correct |
83 |
Correct |
4163 ms |
576992 KB |
Output is correct |
84 |
Correct |
1955 ms |
450844 KB |
Output is correct |
85 |
Correct |
3373 ms |
546436 KB |
Output is correct |
86 |
Correct |
3193 ms |
548372 KB |
Output is correct |
87 |
Correct |
1685 ms |
508188 KB |
Output is correct |
88 |
Correct |
2604 ms |
559968 KB |
Output is correct |
89 |
Correct |
2652 ms |
553736 KB |
Output is correct |
90 |
Correct |
2667 ms |
552760 KB |
Output is correct |