#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
#define dbgv(v) cout<<#v<<" = "; f(i,0,int(v.size())) cout<<v[i]<<" "; cout<<endl
#define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl
#define erorp(x) cout<<#x<<"={"<<x.F<<" , "<<x.S<<"}"<<endl
#define eror(x) cout<<#x<<'='<<(x)<<endl
#define f_(i,a,b) for(int i=a;i>=b;i--)
#define f(i,a,b) for(int i=a;i<b;i++)
#define nb(x) __builtin_popcount(x)
#define all(v) v.begin(),v.end()
#define bit(n,k) (((n)>>(k))&1)
#define Add(x,y) x=(x+y)%mod
#define maxm(a,b) a=max(a,b)
#define minm(a,b) a=min(a,b)
#define lst(x) x[x.size()-1]
#define sz(x) int(x.size())
#define mp make_pair
#define ll long long
#define pb push_back
#define S second
#define F first
const int N=2555,inf=1e8;
int n,m,a[N][N],L[N][N],D[N][N],U[N][N],R[N][N],fen[N][N],dp[N],mark[N],lupd[N][N],pd[N][N];
vector<int> lv[N][N];
vector<pair<int,int>> uv[N][N];
ll ans;
void ad(int x,int y,int val){
for(y+=2;y>0;y-=(y&-y)){
fen[x][y]+=val;
}
}
int gt(int x,int y){
int res=0;
for(y+=2;y<N;y+=(y&-y)){
res+=fen[x][y];
}
return res;
}
void add(int x,int y,int val){
for(x+=2;x<N;x+=(x&-x)){
ad(x,y,val);
}
}
int get(int x,int y){
int res=0;
for(x+=2;x>0;x-=(x&-x)){
res+=gt(x,y);
}
return res;
}
void do_it(){
f(i,1,n+1){
f(j,1,m+1){
U[i][j]=i-1;
while(a[U[i][j]][j]<a[i][j]){
U[i][j]=U[U[i][j]][j];
}
L[i][j]=j-1;
while(a[i][L[i][j]]<a[i][j]){
L[i][j]=L[i][L[i][j]];
}
if(U[i][j] && a[U[i][j]][j]!=a[i][j] && U[i][j]!=i-1){
uv[i][j].pb({U[i][j],0});
}
if(L[i][j] && a[i][L[i][j]]!=a[i][j] && L[i][j]!=j-1){
lv[i][j].pb(L[i][j]);
}
}
}
f_(i,n,1){
f_(j,m,1){
D[i][j]=i+1;
while(a[D[i][j]][j]<a[i][j]){
D[i][j]=D[D[i][j]][j];
}
R[i][j]=j+1;
while(a[i][R[i][j]]<a[i][j]){
R[i][j]=R[i][R[i][j]];
}
if(D[i][j]<=n && D[i][j]!=i+1){
uv[D[i][j]][j].pb({i,0});
}
if(R[i][j]<=m && R[i][j]!=j+1){
lv[i][R[i][j]].pb(j);
}
}
}
}
void edame(){
f(i,1,n+1){
f(j,1,m+1){
f(k,0,int(uv[i][j].size())){
int x=uv[i][j][k].F;
lupd[x][j]=i;
pd[x][j]=j;
if(lupd[x][j-1]==i){
pd[x][j]=pd[x][j-1];
}
uv[i][j][k].S=pd[x][j];
}
}
}
}
void solve(int y){
fill(dp,dp+N,N);
fill(mark,mark+N,0);
f(x,2,n){
for(auto u : lv[x][y]){
mark[u]=x;
if(dp[u]==N){
dp[u]=x;
}
add(dp[u],u,1);
}
for(auto u : lv[x-1][y]){
if(mark[u]==x-1){
dp[u]=N;
}
}
for(auto p : uv[x+1][y-1]){
ans+=get(p.F+1,p.S-1);
}
for(auto u : lv[x][y]){
add(dp[u],u,-1);
}
}
}
ll count_rectangles(vector<vector<int>> T) {
n=T.size(),m=T[0].size();
f(i,0,n){
f(j,0,m){
a[i+1][j+1]=T[i][j]+1;
}
}
f(i,0,n+2){
f(j,0,m+2){
if(a[i][j]) continue ;
a[i][j]=inf;
}
}
do_it();
edame();
f(i,3,m+1){
solve(i);
}
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
307076 KB |
Output is correct |
2 |
Correct |
145 ms |
307860 KB |
Output is correct |
3 |
Correct |
139 ms |
307812 KB |
Output is correct |
4 |
Correct |
152 ms |
307852 KB |
Output is correct |
5 |
Correct |
143 ms |
307536 KB |
Output is correct |
6 |
Correct |
139 ms |
307920 KB |
Output is correct |
7 |
Correct |
152 ms |
307904 KB |
Output is correct |
8 |
Correct |
143 ms |
307260 KB |
Output is correct |
9 |
Correct |
141 ms |
307868 KB |
Output is correct |
10 |
Correct |
140 ms |
307916 KB |
Output is correct |
11 |
Correct |
146 ms |
307848 KB |
Output is correct |
12 |
Correct |
155 ms |
307816 KB |
Output is correct |
13 |
Correct |
145 ms |
306860 KB |
Output is correct |
14 |
Correct |
139 ms |
307140 KB |
Output is correct |
15 |
Correct |
147 ms |
307092 KB |
Output is correct |
16 |
Correct |
145 ms |
306988 KB |
Output is correct |
17 |
Correct |
139 ms |
306872 KB |
Output is correct |
18 |
Correct |
146 ms |
306880 KB |
Output is correct |
19 |
Correct |
142 ms |
307912 KB |
Output is correct |
20 |
Correct |
146 ms |
307492 KB |
Output is correct |
21 |
Correct |
140 ms |
307100 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
307076 KB |
Output is correct |
2 |
Correct |
145 ms |
307860 KB |
Output is correct |
3 |
Correct |
139 ms |
307812 KB |
Output is correct |
4 |
Correct |
152 ms |
307852 KB |
Output is correct |
5 |
Correct |
143 ms |
307536 KB |
Output is correct |
6 |
Correct |
139 ms |
307920 KB |
Output is correct |
7 |
Correct |
152 ms |
307904 KB |
Output is correct |
8 |
Correct |
143 ms |
307260 KB |
Output is correct |
9 |
Correct |
141 ms |
307868 KB |
Output is correct |
10 |
Correct |
140 ms |
307916 KB |
Output is correct |
11 |
Correct |
146 ms |
307848 KB |
Output is correct |
12 |
Correct |
155 ms |
307816 KB |
Output is correct |
13 |
Correct |
145 ms |
306860 KB |
Output is correct |
14 |
Correct |
139 ms |
307140 KB |
Output is correct |
15 |
Correct |
147 ms |
307092 KB |
Output is correct |
16 |
Correct |
145 ms |
306988 KB |
Output is correct |
17 |
Correct |
139 ms |
306872 KB |
Output is correct |
18 |
Correct |
146 ms |
306880 KB |
Output is correct |
19 |
Correct |
142 ms |
307912 KB |
Output is correct |
20 |
Correct |
146 ms |
307492 KB |
Output is correct |
21 |
Correct |
140 ms |
307100 KB |
Output is correct |
22 |
Correct |
148 ms |
309508 KB |
Output is correct |
23 |
Correct |
150 ms |
309536 KB |
Output is correct |
24 |
Correct |
144 ms |
309564 KB |
Output is correct |
25 |
Correct |
158 ms |
309848 KB |
Output is correct |
26 |
Correct |
145 ms |
309964 KB |
Output is correct |
27 |
Correct |
143 ms |
309928 KB |
Output is correct |
28 |
Correct |
148 ms |
309908 KB |
Output is correct |
29 |
Correct |
155 ms |
309756 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
307076 KB |
Output is correct |
2 |
Correct |
145 ms |
307860 KB |
Output is correct |
3 |
Correct |
139 ms |
307812 KB |
Output is correct |
4 |
Correct |
152 ms |
307852 KB |
Output is correct |
5 |
Correct |
143 ms |
307536 KB |
Output is correct |
6 |
Correct |
139 ms |
307920 KB |
Output is correct |
7 |
Correct |
152 ms |
307904 KB |
Output is correct |
8 |
Correct |
143 ms |
307260 KB |
Output is correct |
9 |
Correct |
141 ms |
307868 KB |
Output is correct |
10 |
Correct |
140 ms |
307916 KB |
Output is correct |
11 |
Correct |
146 ms |
307848 KB |
Output is correct |
12 |
Correct |
155 ms |
307816 KB |
Output is correct |
13 |
Correct |
145 ms |
306860 KB |
Output is correct |
14 |
Correct |
139 ms |
307140 KB |
Output is correct |
15 |
Correct |
147 ms |
307092 KB |
Output is correct |
16 |
Correct |
145 ms |
306988 KB |
Output is correct |
17 |
Correct |
148 ms |
309508 KB |
Output is correct |
18 |
Correct |
150 ms |
309536 KB |
Output is correct |
19 |
Correct |
144 ms |
309564 KB |
Output is correct |
20 |
Correct |
158 ms |
309848 KB |
Output is correct |
21 |
Correct |
145 ms |
309964 KB |
Output is correct |
22 |
Correct |
143 ms |
309928 KB |
Output is correct |
23 |
Correct |
148 ms |
309908 KB |
Output is correct |
24 |
Correct |
155 ms |
309756 KB |
Output is correct |
25 |
Correct |
139 ms |
306872 KB |
Output is correct |
26 |
Correct |
146 ms |
306880 KB |
Output is correct |
27 |
Correct |
142 ms |
307912 KB |
Output is correct |
28 |
Correct |
146 ms |
307492 KB |
Output is correct |
29 |
Correct |
140 ms |
307100 KB |
Output is correct |
30 |
Correct |
152 ms |
314664 KB |
Output is correct |
31 |
Correct |
152 ms |
314660 KB |
Output is correct |
32 |
Correct |
163 ms |
314600 KB |
Output is correct |
33 |
Correct |
155 ms |
315784 KB |
Output is correct |
34 |
Correct |
162 ms |
316320 KB |
Output is correct |
35 |
Correct |
162 ms |
316408 KB |
Output is correct |
36 |
Correct |
173 ms |
316312 KB |
Output is correct |
37 |
Correct |
160 ms |
316116 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
307076 KB |
Output is correct |
2 |
Correct |
145 ms |
307860 KB |
Output is correct |
3 |
Correct |
139 ms |
307812 KB |
Output is correct |
4 |
Correct |
152 ms |
307852 KB |
Output is correct |
5 |
Correct |
143 ms |
307536 KB |
Output is correct |
6 |
Correct |
139 ms |
307920 KB |
Output is correct |
7 |
Correct |
152 ms |
307904 KB |
Output is correct |
8 |
Correct |
143 ms |
307260 KB |
Output is correct |
9 |
Correct |
141 ms |
307868 KB |
Output is correct |
10 |
Correct |
140 ms |
307916 KB |
Output is correct |
11 |
Correct |
146 ms |
307848 KB |
Output is correct |
12 |
Correct |
155 ms |
307816 KB |
Output is correct |
13 |
Correct |
145 ms |
306860 KB |
Output is correct |
14 |
Correct |
139 ms |
307140 KB |
Output is correct |
15 |
Correct |
147 ms |
307092 KB |
Output is correct |
16 |
Correct |
145 ms |
306988 KB |
Output is correct |
17 |
Correct |
148 ms |
309508 KB |
Output is correct |
18 |
Correct |
150 ms |
309536 KB |
Output is correct |
19 |
Correct |
144 ms |
309564 KB |
Output is correct |
20 |
Correct |
158 ms |
309848 KB |
Output is correct |
21 |
Correct |
145 ms |
309964 KB |
Output is correct |
22 |
Correct |
143 ms |
309928 KB |
Output is correct |
23 |
Correct |
148 ms |
309908 KB |
Output is correct |
24 |
Correct |
155 ms |
309756 KB |
Output is correct |
25 |
Correct |
152 ms |
314664 KB |
Output is correct |
26 |
Correct |
152 ms |
314660 KB |
Output is correct |
27 |
Correct |
163 ms |
314600 KB |
Output is correct |
28 |
Correct |
155 ms |
315784 KB |
Output is correct |
29 |
Correct |
162 ms |
316320 KB |
Output is correct |
30 |
Correct |
162 ms |
316408 KB |
Output is correct |
31 |
Correct |
173 ms |
316312 KB |
Output is correct |
32 |
Correct |
160 ms |
316116 KB |
Output is correct |
33 |
Correct |
139 ms |
306872 KB |
Output is correct |
34 |
Correct |
146 ms |
306880 KB |
Output is correct |
35 |
Correct |
142 ms |
307912 KB |
Output is correct |
36 |
Correct |
146 ms |
307492 KB |
Output is correct |
37 |
Correct |
140 ms |
307100 KB |
Output is correct |
38 |
Correct |
227 ms |
350024 KB |
Output is correct |
39 |
Correct |
272 ms |
355404 KB |
Output is correct |
40 |
Correct |
258 ms |
352888 KB |
Output is correct |
41 |
Correct |
299 ms |
358240 KB |
Output is correct |
42 |
Correct |
296 ms |
352404 KB |
Output is correct |
43 |
Correct |
297 ms |
352380 KB |
Output is correct |
44 |
Correct |
331 ms |
352444 KB |
Output is correct |
45 |
Correct |
289 ms |
349696 KB |
Output is correct |
46 |
Correct |
254 ms |
356156 KB |
Output is correct |
47 |
Correct |
286 ms |
358708 KB |
Output is correct |
48 |
Correct |
406 ms |
366724 KB |
Output is correct |
49 |
Correct |
422 ms |
367244 KB |
Output is correct |
50 |
Correct |
278 ms |
348112 KB |
Output is correct |
51 |
Correct |
298 ms |
336732 KB |
Output is correct |
52 |
Correct |
373 ms |
365640 KB |
Output is correct |
53 |
Correct |
376 ms |
365416 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
152 ms |
307448 KB |
Output is correct |
2 |
Correct |
147 ms |
307376 KB |
Output is correct |
3 |
Correct |
152 ms |
307184 KB |
Output is correct |
4 |
Correct |
148 ms |
306880 KB |
Output is correct |
5 |
Correct |
154 ms |
307616 KB |
Output is correct |
6 |
Correct |
157 ms |
307396 KB |
Output is correct |
7 |
Correct |
164 ms |
307488 KB |
Output is correct |
8 |
Correct |
148 ms |
307388 KB |
Output is correct |
9 |
Correct |
155 ms |
307432 KB |
Output is correct |
10 |
Correct |
153 ms |
306980 KB |
Output is correct |
11 |
Correct |
168 ms |
307096 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
306872 KB |
Output is correct |
2 |
Correct |
146 ms |
306880 KB |
Output is correct |
3 |
Correct |
142 ms |
307912 KB |
Output is correct |
4 |
Correct |
146 ms |
307492 KB |
Output is correct |
5 |
Correct |
140 ms |
307100 KB |
Output is correct |
6 |
Correct |
145 ms |
307220 KB |
Output is correct |
7 |
Correct |
754 ms |
472908 KB |
Output is correct |
8 |
Correct |
1502 ms |
651968 KB |
Output is correct |
9 |
Correct |
1994 ms |
653796 KB |
Output is correct |
10 |
Correct |
1514 ms |
653744 KB |
Output is correct |
11 |
Correct |
356 ms |
393088 KB |
Output is correct |
12 |
Correct |
611 ms |
478060 KB |
Output is correct |
13 |
Correct |
661 ms |
481076 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
307076 KB |
Output is correct |
2 |
Correct |
145 ms |
307860 KB |
Output is correct |
3 |
Correct |
139 ms |
307812 KB |
Output is correct |
4 |
Correct |
152 ms |
307852 KB |
Output is correct |
5 |
Correct |
143 ms |
307536 KB |
Output is correct |
6 |
Correct |
139 ms |
307920 KB |
Output is correct |
7 |
Correct |
152 ms |
307904 KB |
Output is correct |
8 |
Correct |
143 ms |
307260 KB |
Output is correct |
9 |
Correct |
141 ms |
307868 KB |
Output is correct |
10 |
Correct |
140 ms |
307916 KB |
Output is correct |
11 |
Correct |
146 ms |
307848 KB |
Output is correct |
12 |
Correct |
155 ms |
307816 KB |
Output is correct |
13 |
Correct |
145 ms |
306860 KB |
Output is correct |
14 |
Correct |
139 ms |
307140 KB |
Output is correct |
15 |
Correct |
147 ms |
307092 KB |
Output is correct |
16 |
Correct |
145 ms |
306988 KB |
Output is correct |
17 |
Correct |
148 ms |
309508 KB |
Output is correct |
18 |
Correct |
150 ms |
309536 KB |
Output is correct |
19 |
Correct |
144 ms |
309564 KB |
Output is correct |
20 |
Correct |
158 ms |
309848 KB |
Output is correct |
21 |
Correct |
145 ms |
309964 KB |
Output is correct |
22 |
Correct |
143 ms |
309928 KB |
Output is correct |
23 |
Correct |
148 ms |
309908 KB |
Output is correct |
24 |
Correct |
155 ms |
309756 KB |
Output is correct |
25 |
Correct |
152 ms |
314664 KB |
Output is correct |
26 |
Correct |
152 ms |
314660 KB |
Output is correct |
27 |
Correct |
163 ms |
314600 KB |
Output is correct |
28 |
Correct |
155 ms |
315784 KB |
Output is correct |
29 |
Correct |
162 ms |
316320 KB |
Output is correct |
30 |
Correct |
162 ms |
316408 KB |
Output is correct |
31 |
Correct |
173 ms |
316312 KB |
Output is correct |
32 |
Correct |
160 ms |
316116 KB |
Output is correct |
33 |
Correct |
227 ms |
350024 KB |
Output is correct |
34 |
Correct |
272 ms |
355404 KB |
Output is correct |
35 |
Correct |
258 ms |
352888 KB |
Output is correct |
36 |
Correct |
299 ms |
358240 KB |
Output is correct |
37 |
Correct |
296 ms |
352404 KB |
Output is correct |
38 |
Correct |
297 ms |
352380 KB |
Output is correct |
39 |
Correct |
331 ms |
352444 KB |
Output is correct |
40 |
Correct |
289 ms |
349696 KB |
Output is correct |
41 |
Correct |
254 ms |
356156 KB |
Output is correct |
42 |
Correct |
286 ms |
358708 KB |
Output is correct |
43 |
Correct |
406 ms |
366724 KB |
Output is correct |
44 |
Correct |
422 ms |
367244 KB |
Output is correct |
45 |
Correct |
278 ms |
348112 KB |
Output is correct |
46 |
Correct |
298 ms |
336732 KB |
Output is correct |
47 |
Correct |
373 ms |
365640 KB |
Output is correct |
48 |
Correct |
376 ms |
365416 KB |
Output is correct |
49 |
Correct |
152 ms |
307448 KB |
Output is correct |
50 |
Correct |
147 ms |
307376 KB |
Output is correct |
51 |
Correct |
152 ms |
307184 KB |
Output is correct |
52 |
Correct |
148 ms |
306880 KB |
Output is correct |
53 |
Correct |
154 ms |
307616 KB |
Output is correct |
54 |
Correct |
157 ms |
307396 KB |
Output is correct |
55 |
Correct |
164 ms |
307488 KB |
Output is correct |
56 |
Correct |
148 ms |
307388 KB |
Output is correct |
57 |
Correct |
155 ms |
307432 KB |
Output is correct |
58 |
Correct |
153 ms |
306980 KB |
Output is correct |
59 |
Correct |
168 ms |
307096 KB |
Output is correct |
60 |
Correct |
145 ms |
307220 KB |
Output is correct |
61 |
Correct |
754 ms |
472908 KB |
Output is correct |
62 |
Correct |
1502 ms |
651968 KB |
Output is correct |
63 |
Correct |
1994 ms |
653796 KB |
Output is correct |
64 |
Correct |
1514 ms |
653744 KB |
Output is correct |
65 |
Correct |
356 ms |
393088 KB |
Output is correct |
66 |
Correct |
611 ms |
478060 KB |
Output is correct |
67 |
Correct |
661 ms |
481076 KB |
Output is correct |
68 |
Correct |
139 ms |
306872 KB |
Output is correct |
69 |
Correct |
146 ms |
306880 KB |
Output is correct |
70 |
Correct |
142 ms |
307912 KB |
Output is correct |
71 |
Correct |
146 ms |
307492 KB |
Output is correct |
72 |
Correct |
140 ms |
307100 KB |
Output is correct |
73 |
Correct |
1355 ms |
591112 KB |
Output is correct |
74 |
Correct |
1720 ms |
664668 KB |
Output is correct |
75 |
Correct |
1590 ms |
636140 KB |
Output is correct |
76 |
Correct |
1897 ms |
709736 KB |
Output is correct |
77 |
Correct |
2461 ms |
635492 KB |
Output is correct |
78 |
Correct |
2184 ms |
597240 KB |
Output is correct |
79 |
Correct |
2414 ms |
689536 KB |
Output is correct |
80 |
Correct |
3823 ms |
791232 KB |
Output is correct |
81 |
Correct |
2199 ms |
600340 KB |
Output is correct |
82 |
Correct |
3099 ms |
738284 KB |
Output is correct |
83 |
Correct |
3901 ms |
796384 KB |
Output is correct |
84 |
Correct |
2303 ms |
588512 KB |
Output is correct |
85 |
Correct |
3474 ms |
778340 KB |
Output is correct |
86 |
Correct |
3279 ms |
764620 KB |
Output is correct |
87 |
Correct |
1513 ms |
571332 KB |
Output is correct |
88 |
Correct |
2361 ms |
635776 KB |
Output is correct |
89 |
Correct |
2390 ms |
635544 KB |
Output is correct |
90 |
Correct |
2383 ms |
635436 KB |
Output is correct |