#include <bits/stdc++.h>
#include "rect.h"
//#include "grader.cpp"
using namespace std ;
const int MAX = 2501 ;
vector<int>bit[MAX][MAX] ;
vector<int>v2[MAX][MAX] ;
int getidx(int i , int j , int x)
{
int idx = upper_bound(v2[i][j].begin() , v2[i][j].end() , x) - v2[i][j].begin() ;
return idx ;
}
void Add(int i2 , int j2 , int i , int x)
{
int n = v2[i2][j2].size() ;
for(; i <= n ; i += (i & (-i)))
bit[i2][j2][i] += x ;
}
void Insert(int i2 , int j2 , int i)
{
Add(i2 , j2 , getidx(i2 , j2 , i) , 1) ;
}
void Erase(int i2 , int j2 , int i)
{
Add(i2 , j2 , getidx(i2 , j2 , i) , -1) ;
}
int get(int i2 , int j2 , int i)
{
int sum = 0 ;
for(; i > 0 ; i -= (i & (-i)))
sum += bit[i2][j2][i] ;
return sum ;
}
int query(int i2 , int j2 , int i)
{
return get(i2 , j2 , getidx(i2 , j2 , i)) ;
}
void init(int i , int j)
{
int n = v2[i][j].size() ;
bit[i][j] = vector<int>(n+1 , 0) ;
for(auto &x : v2[i][j])
Insert(i , j , x) ;
}
vector<int>candi[MAX] ;
stack<int>st[MAX] ;
vector<bool>mark[MAX] ;
int n , m ;
int calc(int i , int j , int i2 , int last)
{
int j2 = j-1 ;
i2++ ;
if(j2 < 0 || i2 >= i)
return 0ll ;
return (query(i2 , j2 , last+1) - query(i2 , j2 , j)) ;
}
vector< vector<int> >a ;
vector<int>erased ;
stack<int>st2 ;
void AddRow(int i)
{
while(st2.size())
st2.pop() ;
for(int j = m-1 ; j >= 0 ; --j)
{
while(st2.size() && a[i][j] > a[i][st2.top()])
v2[i][j].push_back(st2.top()) , st2.pop() ;
if(st2.size())
v2[i][j].push_back(st2.top()) ;
while(st2.size() && a[i][st2.top()] == a[i][j])
st2.pop() ;
st2.push(j) ;
sort(v2[i][j].begin() , v2[i][j].end()) ;
init(i , j) ;
}
if(!i)
return ;
for(int j = 0 ; j < m ; ++j)
{
erased.clear() ;
for(auto &k : v2[i-1][j])
{
if(!binary_search(v2[i][j].begin() , v2[i][j].end() , k))
erased.push_back(k) ;
}
for(auto &k : erased)
{
for(int i2 = i-1 ; i2 >= 0 ; --i2)
{
if(!binary_search(v2[i2][j].begin() , v2[i2][j].end() , k))
break ;
Erase(i2 , j , k) ;
}
}
}
}
long long count_rectangles(std::vector<std::vector<int> > v)
{
a = v ;
n = a.size() , m = a[0].size() ;
long long ans = 0 ;
for(int i = 0 ; i < n ; ++i)
{
for(int j = 0 ; j < m ; ++j)
{
while(st[j].size() && a[i][j] > a[st[j].top()][j])
candi[j].push_back(st[j].top()) , st[j].pop() ;
if(st[j].size())
candi[j].push_back(st[j].top()) ;
while(st[j].size() && a[st[j].top()][j] == a[i][j])
st[j].pop() ;
st[j].push(i) ;
sort(candi[j].begin() , candi[j].end()) ;
mark[j] = vector<bool>(candi[j].size() , 0) ;
}
for(int j = 0 ; j < m ; ++j)
{
for(auto &i2 : candi[j])
{
int idx = lower_bound(candi[j].begin() , candi[j].end() , i2) - candi[j].begin() ;
if(mark[j][idx])
continue ;
int last = j ;
for(int k = j ; k < m ; ++k)
{
if(!binary_search(candi[k].begin() , candi[k].end() , i2))
break ;
last = k ;
}
for(int k = j ; k <= last ; ++k)
{
ans += calc(i , k , i2 , last) ;
if(k != j)
{
idx = lower_bound(candi[k].begin() , candi[k].end() , i2) - candi[k].begin() ;
mark[k][idx] = 1 ;
}
}
}
candi[j].clear() , mark[j].clear() ;
}
AddRow(i) ;
}
return ans ;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
162 ms |
295876 KB |
Output is correct |
2 |
Correct |
158 ms |
295872 KB |
Output is correct |
3 |
Correct |
163 ms |
295888 KB |
Output is correct |
4 |
Correct |
160 ms |
295876 KB |
Output is correct |
5 |
Correct |
159 ms |
295876 KB |
Output is correct |
6 |
Correct |
161 ms |
295884 KB |
Output is correct |
7 |
Correct |
160 ms |
295876 KB |
Output is correct |
8 |
Correct |
160 ms |
295880 KB |
Output is correct |
9 |
Correct |
161 ms |
295876 KB |
Output is correct |
10 |
Correct |
163 ms |
295860 KB |
Output is correct |
11 |
Correct |
161 ms |
295876 KB |
Output is correct |
12 |
Correct |
162 ms |
295876 KB |
Output is correct |
13 |
Correct |
157 ms |
295852 KB |
Output is correct |
14 |
Correct |
161 ms |
295876 KB |
Output is correct |
15 |
Correct |
161 ms |
295792 KB |
Output is correct |
16 |
Correct |
157 ms |
295876 KB |
Output is correct |
17 |
Correct |
163 ms |
295788 KB |
Output is correct |
18 |
Correct |
161 ms |
295808 KB |
Output is correct |
19 |
Correct |
160 ms |
295916 KB |
Output is correct |
20 |
Correct |
158 ms |
295900 KB |
Output is correct |
21 |
Correct |
162 ms |
295876 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
162 ms |
295876 KB |
Output is correct |
2 |
Correct |
158 ms |
295872 KB |
Output is correct |
3 |
Correct |
163 ms |
295888 KB |
Output is correct |
4 |
Correct |
160 ms |
295876 KB |
Output is correct |
5 |
Correct |
159 ms |
295876 KB |
Output is correct |
6 |
Correct |
161 ms |
295884 KB |
Output is correct |
7 |
Correct |
160 ms |
295876 KB |
Output is correct |
8 |
Correct |
160 ms |
295880 KB |
Output is correct |
9 |
Correct |
161 ms |
295876 KB |
Output is correct |
10 |
Correct |
163 ms |
295860 KB |
Output is correct |
11 |
Correct |
161 ms |
295876 KB |
Output is correct |
12 |
Correct |
162 ms |
295876 KB |
Output is correct |
13 |
Correct |
157 ms |
295852 KB |
Output is correct |
14 |
Correct |
161 ms |
295876 KB |
Output is correct |
15 |
Correct |
161 ms |
295792 KB |
Output is correct |
16 |
Correct |
157 ms |
295876 KB |
Output is correct |
17 |
Correct |
163 ms |
295788 KB |
Output is correct |
18 |
Correct |
161 ms |
295808 KB |
Output is correct |
19 |
Correct |
160 ms |
295916 KB |
Output is correct |
20 |
Correct |
158 ms |
295900 KB |
Output is correct |
21 |
Correct |
162 ms |
295876 KB |
Output is correct |
22 |
Correct |
162 ms |
296528 KB |
Output is correct |
23 |
Correct |
163 ms |
296424 KB |
Output is correct |
24 |
Correct |
164 ms |
296388 KB |
Output is correct |
25 |
Correct |
165 ms |
296364 KB |
Output is correct |
26 |
Correct |
162 ms |
296308 KB |
Output is correct |
27 |
Correct |
163 ms |
296404 KB |
Output is correct |
28 |
Correct |
163 ms |
296360 KB |
Output is correct |
29 |
Correct |
161 ms |
296132 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
162 ms |
295876 KB |
Output is correct |
2 |
Correct |
158 ms |
295872 KB |
Output is correct |
3 |
Correct |
163 ms |
295888 KB |
Output is correct |
4 |
Correct |
160 ms |
295876 KB |
Output is correct |
5 |
Correct |
159 ms |
295876 KB |
Output is correct |
6 |
Correct |
161 ms |
295884 KB |
Output is correct |
7 |
Correct |
160 ms |
295876 KB |
Output is correct |
8 |
Correct |
160 ms |
295880 KB |
Output is correct |
9 |
Correct |
161 ms |
295876 KB |
Output is correct |
10 |
Correct |
163 ms |
295860 KB |
Output is correct |
11 |
Correct |
161 ms |
295876 KB |
Output is correct |
12 |
Correct |
162 ms |
295876 KB |
Output is correct |
13 |
Correct |
157 ms |
295852 KB |
Output is correct |
14 |
Correct |
161 ms |
295876 KB |
Output is correct |
15 |
Correct |
161 ms |
295792 KB |
Output is correct |
16 |
Correct |
157 ms |
295876 KB |
Output is correct |
17 |
Correct |
162 ms |
296528 KB |
Output is correct |
18 |
Correct |
163 ms |
296424 KB |
Output is correct |
19 |
Correct |
164 ms |
296388 KB |
Output is correct |
20 |
Correct |
165 ms |
296364 KB |
Output is correct |
21 |
Correct |
162 ms |
296308 KB |
Output is correct |
22 |
Correct |
163 ms |
296404 KB |
Output is correct |
23 |
Correct |
163 ms |
296360 KB |
Output is correct |
24 |
Correct |
161 ms |
296132 KB |
Output is correct |
25 |
Correct |
163 ms |
295788 KB |
Output is correct |
26 |
Correct |
161 ms |
295808 KB |
Output is correct |
27 |
Correct |
160 ms |
295916 KB |
Output is correct |
28 |
Correct |
158 ms |
295900 KB |
Output is correct |
29 |
Correct |
162 ms |
295876 KB |
Output is correct |
30 |
Correct |
174 ms |
299244 KB |
Output is correct |
31 |
Correct |
174 ms |
299204 KB |
Output is correct |
32 |
Correct |
179 ms |
299428 KB |
Output is correct |
33 |
Correct |
174 ms |
298904 KB |
Output is correct |
34 |
Correct |
180 ms |
299016 KB |
Output is correct |
35 |
Correct |
180 ms |
299204 KB |
Output is correct |
36 |
Correct |
178 ms |
299152 KB |
Output is correct |
37 |
Correct |
178 ms |
299168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
162 ms |
295876 KB |
Output is correct |
2 |
Correct |
158 ms |
295872 KB |
Output is correct |
3 |
Correct |
163 ms |
295888 KB |
Output is correct |
4 |
Correct |
160 ms |
295876 KB |
Output is correct |
5 |
Correct |
159 ms |
295876 KB |
Output is correct |
6 |
Correct |
161 ms |
295884 KB |
Output is correct |
7 |
Correct |
160 ms |
295876 KB |
Output is correct |
8 |
Correct |
160 ms |
295880 KB |
Output is correct |
9 |
Correct |
161 ms |
295876 KB |
Output is correct |
10 |
Correct |
163 ms |
295860 KB |
Output is correct |
11 |
Correct |
161 ms |
295876 KB |
Output is correct |
12 |
Correct |
162 ms |
295876 KB |
Output is correct |
13 |
Correct |
157 ms |
295852 KB |
Output is correct |
14 |
Correct |
161 ms |
295876 KB |
Output is correct |
15 |
Correct |
161 ms |
295792 KB |
Output is correct |
16 |
Correct |
157 ms |
295876 KB |
Output is correct |
17 |
Correct |
162 ms |
296528 KB |
Output is correct |
18 |
Correct |
163 ms |
296424 KB |
Output is correct |
19 |
Correct |
164 ms |
296388 KB |
Output is correct |
20 |
Correct |
165 ms |
296364 KB |
Output is correct |
21 |
Correct |
162 ms |
296308 KB |
Output is correct |
22 |
Correct |
163 ms |
296404 KB |
Output is correct |
23 |
Correct |
163 ms |
296360 KB |
Output is correct |
24 |
Correct |
161 ms |
296132 KB |
Output is correct |
25 |
Correct |
174 ms |
299244 KB |
Output is correct |
26 |
Correct |
174 ms |
299204 KB |
Output is correct |
27 |
Correct |
179 ms |
299428 KB |
Output is correct |
28 |
Correct |
174 ms |
298904 KB |
Output is correct |
29 |
Correct |
180 ms |
299016 KB |
Output is correct |
30 |
Correct |
180 ms |
299204 KB |
Output is correct |
31 |
Correct |
178 ms |
299152 KB |
Output is correct |
32 |
Correct |
178 ms |
299168 KB |
Output is correct |
33 |
Correct |
163 ms |
295788 KB |
Output is correct |
34 |
Correct |
161 ms |
295808 KB |
Output is correct |
35 |
Correct |
160 ms |
295916 KB |
Output is correct |
36 |
Correct |
158 ms |
295900 KB |
Output is correct |
37 |
Correct |
162 ms |
295876 KB |
Output is correct |
38 |
Correct |
386 ms |
334792 KB |
Output is correct |
39 |
Correct |
396 ms |
336948 KB |
Output is correct |
40 |
Correct |
360 ms |
333984 KB |
Output is correct |
41 |
Correct |
391 ms |
336264 KB |
Output is correct |
42 |
Correct |
382 ms |
336264 KB |
Output is correct |
43 |
Correct |
370 ms |
336244 KB |
Output is correct |
44 |
Correct |
376 ms |
336444 KB |
Output is correct |
45 |
Correct |
358 ms |
333960 KB |
Output is correct |
46 |
Correct |
324 ms |
332784 KB |
Output is correct |
47 |
Correct |
344 ms |
332740 KB |
Output is correct |
48 |
Correct |
420 ms |
333740 KB |
Output is correct |
49 |
Correct |
433 ms |
333892 KB |
Output is correct |
50 |
Correct |
294 ms |
315152 KB |
Output is correct |
51 |
Correct |
295 ms |
315320 KB |
Output is correct |
52 |
Correct |
418 ms |
333832 KB |
Output is correct |
53 |
Correct |
416 ms |
333748 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
160 ms |
296580 KB |
Output is correct |
2 |
Correct |
162 ms |
296476 KB |
Output is correct |
3 |
Correct |
160 ms |
296524 KB |
Output is correct |
4 |
Correct |
158 ms |
295876 KB |
Output is correct |
5 |
Correct |
162 ms |
296572 KB |
Output is correct |
6 |
Correct |
166 ms |
296672 KB |
Output is correct |
7 |
Correct |
165 ms |
296644 KB |
Output is correct |
8 |
Correct |
163 ms |
296644 KB |
Output is correct |
9 |
Correct |
164 ms |
296608 KB |
Output is correct |
10 |
Correct |
160 ms |
296132 KB |
Output is correct |
11 |
Correct |
160 ms |
296344 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
163 ms |
295788 KB |
Output is correct |
2 |
Correct |
161 ms |
295808 KB |
Output is correct |
3 |
Correct |
160 ms |
295916 KB |
Output is correct |
4 |
Correct |
158 ms |
295900 KB |
Output is correct |
5 |
Correct |
162 ms |
295876 KB |
Output is correct |
6 |
Correct |
158 ms |
295928 KB |
Output is correct |
7 |
Correct |
1167 ms |
509984 KB |
Output is correct |
8 |
Correct |
2469 ms |
764552 KB |
Output is correct |
9 |
Correct |
2471 ms |
762416 KB |
Output is correct |
10 |
Correct |
2475 ms |
762296 KB |
Output is correct |
11 |
Correct |
959 ms |
526724 KB |
Output is correct |
12 |
Correct |
1828 ms |
733520 KB |
Output is correct |
13 |
Correct |
1962 ms |
762204 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
162 ms |
295876 KB |
Output is correct |
2 |
Correct |
158 ms |
295872 KB |
Output is correct |
3 |
Correct |
163 ms |
295888 KB |
Output is correct |
4 |
Correct |
160 ms |
295876 KB |
Output is correct |
5 |
Correct |
159 ms |
295876 KB |
Output is correct |
6 |
Correct |
161 ms |
295884 KB |
Output is correct |
7 |
Correct |
160 ms |
295876 KB |
Output is correct |
8 |
Correct |
160 ms |
295880 KB |
Output is correct |
9 |
Correct |
161 ms |
295876 KB |
Output is correct |
10 |
Correct |
163 ms |
295860 KB |
Output is correct |
11 |
Correct |
161 ms |
295876 KB |
Output is correct |
12 |
Correct |
162 ms |
295876 KB |
Output is correct |
13 |
Correct |
157 ms |
295852 KB |
Output is correct |
14 |
Correct |
161 ms |
295876 KB |
Output is correct |
15 |
Correct |
161 ms |
295792 KB |
Output is correct |
16 |
Correct |
157 ms |
295876 KB |
Output is correct |
17 |
Correct |
162 ms |
296528 KB |
Output is correct |
18 |
Correct |
163 ms |
296424 KB |
Output is correct |
19 |
Correct |
164 ms |
296388 KB |
Output is correct |
20 |
Correct |
165 ms |
296364 KB |
Output is correct |
21 |
Correct |
162 ms |
296308 KB |
Output is correct |
22 |
Correct |
163 ms |
296404 KB |
Output is correct |
23 |
Correct |
163 ms |
296360 KB |
Output is correct |
24 |
Correct |
161 ms |
296132 KB |
Output is correct |
25 |
Correct |
174 ms |
299244 KB |
Output is correct |
26 |
Correct |
174 ms |
299204 KB |
Output is correct |
27 |
Correct |
179 ms |
299428 KB |
Output is correct |
28 |
Correct |
174 ms |
298904 KB |
Output is correct |
29 |
Correct |
180 ms |
299016 KB |
Output is correct |
30 |
Correct |
180 ms |
299204 KB |
Output is correct |
31 |
Correct |
178 ms |
299152 KB |
Output is correct |
32 |
Correct |
178 ms |
299168 KB |
Output is correct |
33 |
Correct |
386 ms |
334792 KB |
Output is correct |
34 |
Correct |
396 ms |
336948 KB |
Output is correct |
35 |
Correct |
360 ms |
333984 KB |
Output is correct |
36 |
Correct |
391 ms |
336264 KB |
Output is correct |
37 |
Correct |
382 ms |
336264 KB |
Output is correct |
38 |
Correct |
370 ms |
336244 KB |
Output is correct |
39 |
Correct |
376 ms |
336444 KB |
Output is correct |
40 |
Correct |
358 ms |
333960 KB |
Output is correct |
41 |
Correct |
324 ms |
332784 KB |
Output is correct |
42 |
Correct |
344 ms |
332740 KB |
Output is correct |
43 |
Correct |
420 ms |
333740 KB |
Output is correct |
44 |
Correct |
433 ms |
333892 KB |
Output is correct |
45 |
Correct |
294 ms |
315152 KB |
Output is correct |
46 |
Correct |
295 ms |
315320 KB |
Output is correct |
47 |
Correct |
418 ms |
333832 KB |
Output is correct |
48 |
Correct |
416 ms |
333748 KB |
Output is correct |
49 |
Correct |
160 ms |
296580 KB |
Output is correct |
50 |
Correct |
162 ms |
296476 KB |
Output is correct |
51 |
Correct |
160 ms |
296524 KB |
Output is correct |
52 |
Correct |
158 ms |
295876 KB |
Output is correct |
53 |
Correct |
162 ms |
296572 KB |
Output is correct |
54 |
Correct |
166 ms |
296672 KB |
Output is correct |
55 |
Correct |
165 ms |
296644 KB |
Output is correct |
56 |
Correct |
163 ms |
296644 KB |
Output is correct |
57 |
Correct |
164 ms |
296608 KB |
Output is correct |
58 |
Correct |
160 ms |
296132 KB |
Output is correct |
59 |
Correct |
160 ms |
296344 KB |
Output is correct |
60 |
Correct |
158 ms |
295928 KB |
Output is correct |
61 |
Correct |
1167 ms |
509984 KB |
Output is correct |
62 |
Correct |
2469 ms |
764552 KB |
Output is correct |
63 |
Correct |
2471 ms |
762416 KB |
Output is correct |
64 |
Correct |
2475 ms |
762296 KB |
Output is correct |
65 |
Correct |
959 ms |
526724 KB |
Output is correct |
66 |
Correct |
1828 ms |
733520 KB |
Output is correct |
67 |
Correct |
1962 ms |
762204 KB |
Output is correct |
68 |
Correct |
163 ms |
295788 KB |
Output is correct |
69 |
Correct |
161 ms |
295808 KB |
Output is correct |
70 |
Correct |
160 ms |
295916 KB |
Output is correct |
71 |
Correct |
158 ms |
295900 KB |
Output is correct |
72 |
Correct |
162 ms |
295876 KB |
Output is correct |
73 |
Correct |
3403 ms |
779392 KB |
Output is correct |
74 |
Correct |
3703 ms |
809196 KB |
Output is correct |
75 |
Correct |
2867 ms |
774960 KB |
Output is correct |
76 |
Correct |
3740 ms |
803324 KB |
Output is correct |
77 |
Correct |
3603 ms |
807512 KB |
Output is correct |
78 |
Correct |
2438 ms |
594424 KB |
Output is correct |
79 |
Correct |
2594 ms |
601000 KB |
Output is correct |
80 |
Correct |
3983 ms |
775744 KB |
Output is correct |
81 |
Correct |
2400 ms |
586436 KB |
Output is correct |
82 |
Correct |
3263 ms |
684188 KB |
Output is correct |
83 |
Correct |
4126 ms |
781560 KB |
Output is correct |
84 |
Correct |
2234 ms |
589684 KB |
Output is correct |
85 |
Correct |
3802 ms |
780732 KB |
Output is correct |
86 |
Correct |
3713 ms |
767560 KB |
Output is correct |
87 |
Correct |
2256 ms |
604800 KB |
Output is correct |
88 |
Correct |
3663 ms |
811564 KB |
Output is correct |
89 |
Correct |
3640 ms |
811704 KB |
Output is correct |
90 |
Correct |
3646 ms |
810272 KB |
Output is correct |