# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
147888 |
2019-08-31T05:21:43 Z |
kuroni |
Rectangles (IOI19_rect) |
C++17 |
|
1354 ms |
211552 KB |
#pragma once
#include <bits/stdc++.h>
#include "rect.h"
#define fi first
#define se second
using namespace std;
const int MX = 2505;
vector<int> row[MX], col[MX];
vector<pair<int, int>> pair_row, pair_col;
int bit[MX];
int lst_row[MX][MX], cnt_row[MX][MX];
int lst_col[MX][MX], cnt_col[MX][MX];
void update(int u, int v)
{
for (; u < MX; u += u & -u)
bit[u] += v;
}
int query(int u)
{
int ret = 0;
for (; u > 0; u -= u & -u)
ret += bit[u];
return ret;
}
pair<int, int> process(int l, int r, int cur, int lst[MX][MX], int cnt[MX][MX])
{
if (lst[l][r] != cur - 1)
cnt[l][r] = 0;
cnt[l][r]++; lst[l][r] = cur;
return {r - l - 1, cnt[l][r]};
}
long long find_ans(vector<pair<int, int>> &row, vector<pair<int, int>> &col)
{
long long ans = 0;
for (pair<int, int> &v : col)
swap(v.fi, v.se);
sort(row.begin(), row.end(), greater<pair<int, int>>());
sort(col.begin(), col.end(), greater<pair<int, int>>());
int pt = 0;
for (pair<int, int> &v : row)
{
for (; pt < col.size() && v.fi <= col[pt].fi; pt++)
update(col[pt].se, 1);
ans += query(v.se);
}
for (int i = 0; i < pt; i++)
update(col[i].se, -1);
return ans;
}
long long count_rectangles(vector<vector<int>> a)
{
bool eq;
int m = a.size(), n = a[0].size();
long long ans = 0;
for (int i = 0; i < m; i++)
row[i] = {0};
for (int i = 0; i < n; i++)
col[i] = {0};
for (int i = 0; i < m - 1; i++)
for (int j = 0; j < n - 1; j++)
{
eq = false; pair_row.clear();
while (!row[i].empty())
{
int u = row[i].back();
if (u < j && !eq)
pair_row.push_back(process(u, j + 1, i, lst_row, cnt_row));
eq = (a[i][u] == a[i][j + 1]);
if (a[i][u] <= a[i][j + 1])
row[i].pop_back();
else
break;
}
row[i].push_back(j + 1);
eq = false; pair_col.clear();
while (!col[j].empty())
{
int u = col[j].back();
if (u < i && !eq)
pair_col.push_back(process(u, i + 1, j, lst_col, cnt_col));
eq = (a[u][j] == a[i + 1][j]);
if (a[u][j] <= a[i + 1][j])
col[j].pop_back();
else
break;
}
col[j].push_back(i + 1);
ans += find_ans(pair_row, pair_col);
}
return ans;
}
Compilation message
rect.cpp:1:9: warning: #pragma once in main file
#pragma once
^~~~
rect.cpp: In function 'long long int find_ans(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >&)':
rect.cpp:48:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (; pt < col.size() && v.fi <= col[pt].fi; pt++)
~~~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
3 ms |
888 KB |
Output is correct |
3 |
Correct |
3 ms |
888 KB |
Output is correct |
4 |
Correct |
3 ms |
888 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
3 ms |
888 KB |
Output is correct |
7 |
Correct |
3 ms |
760 KB |
Output is correct |
8 |
Correct |
3 ms |
760 KB |
Output is correct |
9 |
Correct |
3 ms |
888 KB |
Output is correct |
10 |
Correct |
3 ms |
888 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
3 ms |
888 KB |
Output is correct |
13 |
Correct |
2 ms |
476 KB |
Output is correct |
14 |
Correct |
2 ms |
504 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
504 KB |
Output is correct |
17 |
Correct |
2 ms |
504 KB |
Output is correct |
18 |
Correct |
2 ms |
376 KB |
Output is correct |
19 |
Correct |
3 ms |
888 KB |
Output is correct |
20 |
Correct |
2 ms |
504 KB |
Output is correct |
21 |
Correct |
2 ms |
504 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
3 ms |
888 KB |
Output is correct |
3 |
Correct |
3 ms |
888 KB |
Output is correct |
4 |
Correct |
3 ms |
888 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
3 ms |
888 KB |
Output is correct |
7 |
Correct |
3 ms |
760 KB |
Output is correct |
8 |
Correct |
3 ms |
760 KB |
Output is correct |
9 |
Correct |
3 ms |
888 KB |
Output is correct |
10 |
Correct |
3 ms |
888 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
3 ms |
888 KB |
Output is correct |
13 |
Correct |
2 ms |
476 KB |
Output is correct |
14 |
Correct |
2 ms |
504 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
504 KB |
Output is correct |
17 |
Correct |
4 ms |
1948 KB |
Output is correct |
18 |
Correct |
4 ms |
1912 KB |
Output is correct |
19 |
Correct |
4 ms |
1912 KB |
Output is correct |
20 |
Correct |
4 ms |
1784 KB |
Output is correct |
21 |
Correct |
5 ms |
1784 KB |
Output is correct |
22 |
Correct |
4 ms |
1784 KB |
Output is correct |
23 |
Correct |
5 ms |
1784 KB |
Output is correct |
24 |
Correct |
4 ms |
1528 KB |
Output is correct |
25 |
Correct |
2 ms |
504 KB |
Output is correct |
26 |
Correct |
2 ms |
376 KB |
Output is correct |
27 |
Correct |
3 ms |
888 KB |
Output is correct |
28 |
Correct |
2 ms |
504 KB |
Output is correct |
29 |
Correct |
2 ms |
504 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
3 ms |
888 KB |
Output is correct |
3 |
Correct |
3 ms |
888 KB |
Output is correct |
4 |
Correct |
3 ms |
888 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
3 ms |
888 KB |
Output is correct |
7 |
Correct |
3 ms |
760 KB |
Output is correct |
8 |
Correct |
3 ms |
760 KB |
Output is correct |
9 |
Correct |
3 ms |
888 KB |
Output is correct |
10 |
Correct |
3 ms |
888 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
3 ms |
888 KB |
Output is correct |
13 |
Correct |
2 ms |
476 KB |
Output is correct |
14 |
Correct |
2 ms |
504 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
504 KB |
Output is correct |
17 |
Correct |
4 ms |
1948 KB |
Output is correct |
18 |
Correct |
4 ms |
1912 KB |
Output is correct |
19 |
Correct |
4 ms |
1912 KB |
Output is correct |
20 |
Correct |
4 ms |
1784 KB |
Output is correct |
21 |
Correct |
5 ms |
1784 KB |
Output is correct |
22 |
Correct |
4 ms |
1784 KB |
Output is correct |
23 |
Correct |
5 ms |
1784 KB |
Output is correct |
24 |
Correct |
4 ms |
1528 KB |
Output is correct |
25 |
Correct |
10 ms |
4600 KB |
Output is correct |
26 |
Correct |
10 ms |
4600 KB |
Output is correct |
27 |
Correct |
11 ms |
4728 KB |
Output is correct |
28 |
Correct |
9 ms |
4036 KB |
Output is correct |
29 |
Correct |
12 ms |
4344 KB |
Output is correct |
30 |
Correct |
12 ms |
4600 KB |
Output is correct |
31 |
Correct |
12 ms |
4344 KB |
Output is correct |
32 |
Correct |
12 ms |
4344 KB |
Output is correct |
33 |
Correct |
2 ms |
504 KB |
Output is correct |
34 |
Correct |
2 ms |
376 KB |
Output is correct |
35 |
Correct |
3 ms |
888 KB |
Output is correct |
36 |
Correct |
2 ms |
504 KB |
Output is correct |
37 |
Correct |
2 ms |
504 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
3 ms |
888 KB |
Output is correct |
3 |
Correct |
3 ms |
888 KB |
Output is correct |
4 |
Correct |
3 ms |
888 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
3 ms |
888 KB |
Output is correct |
7 |
Correct |
3 ms |
760 KB |
Output is correct |
8 |
Correct |
3 ms |
760 KB |
Output is correct |
9 |
Correct |
3 ms |
888 KB |
Output is correct |
10 |
Correct |
3 ms |
888 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
3 ms |
888 KB |
Output is correct |
13 |
Correct |
2 ms |
476 KB |
Output is correct |
14 |
Correct |
2 ms |
504 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
504 KB |
Output is correct |
17 |
Correct |
4 ms |
1948 KB |
Output is correct |
18 |
Correct |
4 ms |
1912 KB |
Output is correct |
19 |
Correct |
4 ms |
1912 KB |
Output is correct |
20 |
Correct |
4 ms |
1784 KB |
Output is correct |
21 |
Correct |
5 ms |
1784 KB |
Output is correct |
22 |
Correct |
4 ms |
1784 KB |
Output is correct |
23 |
Correct |
5 ms |
1784 KB |
Output is correct |
24 |
Correct |
4 ms |
1528 KB |
Output is correct |
25 |
Correct |
10 ms |
4600 KB |
Output is correct |
26 |
Correct |
10 ms |
4600 KB |
Output is correct |
27 |
Correct |
11 ms |
4728 KB |
Output is correct |
28 |
Correct |
9 ms |
4036 KB |
Output is correct |
29 |
Correct |
12 ms |
4344 KB |
Output is correct |
30 |
Correct |
12 ms |
4600 KB |
Output is correct |
31 |
Correct |
12 ms |
4344 KB |
Output is correct |
32 |
Correct |
12 ms |
4344 KB |
Output is correct |
33 |
Correct |
85 ms |
25336 KB |
Output is correct |
34 |
Correct |
76 ms |
25436 KB |
Output is correct |
35 |
Correct |
82 ms |
25336 KB |
Output is correct |
36 |
Correct |
75 ms |
25484 KB |
Output is correct |
37 |
Correct |
91 ms |
24440 KB |
Output is correct |
38 |
Correct |
87 ms |
24568 KB |
Output is correct |
39 |
Correct |
93 ms |
24972 KB |
Output is correct |
40 |
Correct |
87 ms |
24036 KB |
Output is correct |
41 |
Correct |
47 ms |
16632 KB |
Output is correct |
42 |
Correct |
56 ms |
16760 KB |
Output is correct |
43 |
Correct |
98 ms |
20220 KB |
Output is correct |
44 |
Correct |
115 ms |
22352 KB |
Output is correct |
45 |
Correct |
55 ms |
14456 KB |
Output is correct |
46 |
Correct |
56 ms |
14328 KB |
Output is correct |
47 |
Correct |
95 ms |
19172 KB |
Output is correct |
48 |
Correct |
98 ms |
20092 KB |
Output is correct |
49 |
Correct |
2 ms |
504 KB |
Output is correct |
50 |
Correct |
2 ms |
376 KB |
Output is correct |
51 |
Correct |
3 ms |
888 KB |
Output is correct |
52 |
Correct |
2 ms |
504 KB |
Output is correct |
53 |
Correct |
2 ms |
504 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
20856 KB |
Output is correct |
2 |
Correct |
19 ms |
17788 KB |
Output is correct |
3 |
Correct |
3 ms |
604 KB |
Output is correct |
4 |
Correct |
2 ms |
476 KB |
Output is correct |
5 |
Correct |
19 ms |
16120 KB |
Output is correct |
6 |
Correct |
19 ms |
15608 KB |
Output is correct |
7 |
Correct |
19 ms |
16040 KB |
Output is correct |
8 |
Correct |
18 ms |
14840 KB |
Output is correct |
9 |
Correct |
18 ms |
14716 KB |
Output is correct |
10 |
Correct |
3 ms |
632 KB |
Output is correct |
11 |
Correct |
13 ms |
10872 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
632 KB |
Output is correct |
2 |
Correct |
264 ms |
57424 KB |
Output is correct |
3 |
Correct |
554 ms |
102136 KB |
Output is correct |
4 |
Correct |
555 ms |
102628 KB |
Output is correct |
5 |
Correct |
548 ms |
102492 KB |
Output is correct |
6 |
Correct |
110 ms |
30840 KB |
Output is correct |
7 |
Correct |
212 ms |
58232 KB |
Output is correct |
8 |
Correct |
222 ms |
62072 KB |
Output is correct |
9 |
Correct |
2 ms |
504 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
2 ms |
504 KB |
Output is correct |
13 |
Correct |
2 ms |
504 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
3 ms |
888 KB |
Output is correct |
3 |
Correct |
3 ms |
888 KB |
Output is correct |
4 |
Correct |
3 ms |
888 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
3 ms |
888 KB |
Output is correct |
7 |
Correct |
3 ms |
760 KB |
Output is correct |
8 |
Correct |
3 ms |
760 KB |
Output is correct |
9 |
Correct |
3 ms |
888 KB |
Output is correct |
10 |
Correct |
3 ms |
888 KB |
Output is correct |
11 |
Correct |
3 ms |
888 KB |
Output is correct |
12 |
Correct |
3 ms |
888 KB |
Output is correct |
13 |
Correct |
2 ms |
476 KB |
Output is correct |
14 |
Correct |
2 ms |
504 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
504 KB |
Output is correct |
17 |
Correct |
4 ms |
1948 KB |
Output is correct |
18 |
Correct |
4 ms |
1912 KB |
Output is correct |
19 |
Correct |
4 ms |
1912 KB |
Output is correct |
20 |
Correct |
4 ms |
1784 KB |
Output is correct |
21 |
Correct |
5 ms |
1784 KB |
Output is correct |
22 |
Correct |
4 ms |
1784 KB |
Output is correct |
23 |
Correct |
5 ms |
1784 KB |
Output is correct |
24 |
Correct |
4 ms |
1528 KB |
Output is correct |
25 |
Correct |
10 ms |
4600 KB |
Output is correct |
26 |
Correct |
10 ms |
4600 KB |
Output is correct |
27 |
Correct |
11 ms |
4728 KB |
Output is correct |
28 |
Correct |
9 ms |
4036 KB |
Output is correct |
29 |
Correct |
12 ms |
4344 KB |
Output is correct |
30 |
Correct |
12 ms |
4600 KB |
Output is correct |
31 |
Correct |
12 ms |
4344 KB |
Output is correct |
32 |
Correct |
12 ms |
4344 KB |
Output is correct |
33 |
Correct |
85 ms |
25336 KB |
Output is correct |
34 |
Correct |
76 ms |
25436 KB |
Output is correct |
35 |
Correct |
82 ms |
25336 KB |
Output is correct |
36 |
Correct |
75 ms |
25484 KB |
Output is correct |
37 |
Correct |
91 ms |
24440 KB |
Output is correct |
38 |
Correct |
87 ms |
24568 KB |
Output is correct |
39 |
Correct |
93 ms |
24972 KB |
Output is correct |
40 |
Correct |
87 ms |
24036 KB |
Output is correct |
41 |
Correct |
47 ms |
16632 KB |
Output is correct |
42 |
Correct |
56 ms |
16760 KB |
Output is correct |
43 |
Correct |
98 ms |
20220 KB |
Output is correct |
44 |
Correct |
115 ms |
22352 KB |
Output is correct |
45 |
Correct |
55 ms |
14456 KB |
Output is correct |
46 |
Correct |
56 ms |
14328 KB |
Output is correct |
47 |
Correct |
95 ms |
19172 KB |
Output is correct |
48 |
Correct |
98 ms |
20092 KB |
Output is correct |
49 |
Correct |
22 ms |
20856 KB |
Output is correct |
50 |
Correct |
19 ms |
17788 KB |
Output is correct |
51 |
Correct |
3 ms |
604 KB |
Output is correct |
52 |
Correct |
2 ms |
476 KB |
Output is correct |
53 |
Correct |
19 ms |
16120 KB |
Output is correct |
54 |
Correct |
19 ms |
15608 KB |
Output is correct |
55 |
Correct |
19 ms |
16040 KB |
Output is correct |
56 |
Correct |
18 ms |
14840 KB |
Output is correct |
57 |
Correct |
18 ms |
14716 KB |
Output is correct |
58 |
Correct |
3 ms |
632 KB |
Output is correct |
59 |
Correct |
13 ms |
10872 KB |
Output is correct |
60 |
Correct |
3 ms |
632 KB |
Output is correct |
61 |
Correct |
264 ms |
57424 KB |
Output is correct |
62 |
Correct |
554 ms |
102136 KB |
Output is correct |
63 |
Correct |
555 ms |
102628 KB |
Output is correct |
64 |
Correct |
548 ms |
102492 KB |
Output is correct |
65 |
Correct |
110 ms |
30840 KB |
Output is correct |
66 |
Correct |
212 ms |
58232 KB |
Output is correct |
67 |
Correct |
222 ms |
62072 KB |
Output is correct |
68 |
Correct |
1081 ms |
211552 KB |
Output is correct |
69 |
Correct |
972 ms |
211136 KB |
Output is correct |
70 |
Correct |
1117 ms |
211232 KB |
Output is correct |
71 |
Correct |
1037 ms |
211308 KB |
Output is correct |
72 |
Correct |
1295 ms |
209456 KB |
Output is correct |
73 |
Correct |
755 ms |
94056 KB |
Output is correct |
74 |
Correct |
821 ms |
110624 KB |
Output is correct |
75 |
Correct |
1245 ms |
140088 KB |
Output is correct |
76 |
Correct |
840 ms |
114204 KB |
Output is correct |
77 |
Correct |
1075 ms |
143520 KB |
Output is correct |
78 |
Correct |
1354 ms |
172560 KB |
Output is correct |
79 |
Correct |
716 ms |
87416 KB |
Output is correct |
80 |
Correct |
1254 ms |
144676 KB |
Output is correct |
81 |
Correct |
1209 ms |
139620 KB |
Output is correct |
82 |
Correct |
773 ms |
133332 KB |
Output is correct |
83 |
Correct |
1277 ms |
208476 KB |
Output is correct |
84 |
Correct |
1302 ms |
209556 KB |
Output is correct |
85 |
Correct |
1300 ms |
209536 KB |
Output is correct |
86 |
Correct |
2 ms |
504 KB |
Output is correct |
87 |
Correct |
2 ms |
376 KB |
Output is correct |
88 |
Correct |
3 ms |
888 KB |
Output is correct |
89 |
Correct |
2 ms |
504 KB |
Output is correct |
90 |
Correct |
2 ms |
504 KB |
Output is correct |