# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
274230 |
2020-08-19T10:08:43 Z |
ne4eHbKa |
Rectangles (IOI19_rect) |
C++17 |
|
4785 ms |
936304 KB |
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
#define ft first
#define sd second
#define _ <<' '<<
void* MEM = malloc(800 << 20);
void* operator new(const size_t f) {
void* res = MEM;
MEM += f;
return res;
}
void operator delete(void*) {}
//#pragma GCC optimize("Ofast,O3")
namespace S {
//#include <ext/pb_ds/assoc_container.hpp>
//typedef __gnu_pbds::cc_hash_table<int, int> ht;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vv;
typedef pair<int, int> pii;
const int N = 2505;
int n, m;
list<short> l[N][N], u[N][N];
int p[N], length[N], la[N];
list<pii> fl[N], cl, fu, cu;
bool mk[N];
int c[2 * N], cn, xn, yn, rc[2 * N];
pii x[N], y[N];
int f[N], fn;
int fw[2 * N], fmax, nx[N + N], pr[N + N];
inline void finit(const int n) { fmax = n; memset(fw, 0, n + 1 << 2); }
inline void fadd(int i) { for(i = fmax - i; i <= fmax; i = nx[i]) fw[i]++; }
inline int fget(int i) { int v{}; for(i = fmax - i; i; i = pr[i]) v += fw[i]; return v; }
ll solve() {
for(int i = 0; i < N + N; ++i) nx[i] = i + (i & -i), pr[i] = i - (i & -i);
ll ans = 0;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
swap(cl, fl[j]);
auto it = cl.begin();
for(const int &t : l[i][j]) {
for(; it != cl.end() && it->ft < t; ++it);
fl[j].push_back({t, 1 + (it != cl.end() && it->ft == t ? it->sd : 0)});
}
cl.clear();
swap(cu, fu);
it = cu.begin();
for(const int &t : u[i][j]) {
for(; it != cu.end() && it->ft < t; ++it);
fu.push_back({t, 1 + (it != cu.end() && it->ft == t ? it->sd : 0)});
}
cu.clear();
const auto &a = fl[j], &b = fu;
if(a.size() * b.size() < 5) {
for(const auto &i : a)
for(const auto &j : b)
ans += i.ft <= j.sd && j.ft <= i.sd;
continue;
}
cn = 0;
for(const auto &i : a) c[cn++] = i.ft;
for(const auto &i : b) c[cn++] = i.sd;
sort(c, c + cn);
cn = unique(c, c + cn) - c;
xn = yn = 0;
finit(cn);
for(int i = 0; i < cn; ++i) rc[c[i]] = i;
for(const auto &i : a) x[xn++] = {i.sd, rc[i.ft]};
for(const auto &i : b) y[yn++] = {i.ft, rc[i.sd]};
sort(x, x + xn, [] (const pii &a, const pii &b) {return a.ft < b.ft;});
for(int i = 0, it = 0; i < xn; ++i) {
for(; it < yn && y[it].ft <= x[i].ft; ++it)
fadd(y[it].sd);
ans += fget(x[i].sd);
}
}
fu.clear();
}
return ans;
}
int last(int i) {
return la[i] == i ? i : la[i] = last(la[i]);
}
void unite(int i, int j) {
i = last(i), j = last(j);
length[j] += length[i];
la[i] = j;
}
}
S::ll count_rectangles(S::vv a) {
using namespace S;
n = a.size();
m = a[0].size();
for(int i = 0; i < n; ++i) {
iota(p, p + m, 0);
iota(la, la + m, 0);
memset(mk, 0, m);
sort(p, p + m, [&] (const int &fi, const int &se) {return a[i][fi] < a[i][se];});
for(int t = 0; t < m; ) {
int v = a[i][p[t]];
fn = 0;
for(; t < m && a[i][p[t]] == v; ++t) {
int j = p[t];
mk[j] = true;
length[j] = 1;
f[fn++] = j;
if(j + 1 < m && mk[j + 1]) unite(j, j + 1);
if(j && mk[j - 1]) unite(j - 1, j);
}
for(int it = 0; it < fn; ++it) mk[f[it] = last(f[it])] = false;
for(int it = 0; it < fn; ++it) {
int j = f[it];
if(mk[j]) continue;
mk[j] = true;
if(i == 0 || i == n - 1) continue;
if(j == m - 1 || length[j] == j + 1) continue;
l[i][j].push_back(length[j]);
}
}
}
for(int j = 0; j < m; ++j) {
iota(p, p + n, 0);
iota(la, la + n, 0);
memset(mk, 0, n);
sort(p, p + n, [&] (const int &fi, const int &se) {return a[fi][j] < a[se][j];});
for(int t = 0; t < n; ) {
int v = a[p[t]][j];
fn = 0;
for(; t < n && a[p[t]][j] == v; ++t) {
int i = p[t];
mk[i] = true;
length[i] = 1;
f[fn++] = i;
if(i + 1 < n && mk[i + 1]) unite(i, i + 1);
if(i && mk[i - 1]) unite(i - 1, i);
}
for(int it = 0; it < fn; ++it) mk[f[it] = last(f[it])] = false;
for(int it = 0; it < fn; ++it) {
int i = f[it];
if(mk[i]) continue;
mk[i] = true;
if(j == 0 || j == m - 1) continue;
if(i == n - 1 || length[i] == i + 1) continue;
u[i][j].push_back(length[i]);
}
}
}
return solve();
}
#undef ft
#undef sd
#undef _
Compilation message
rect.cpp: In function 'void* operator new(size_t)':
rect.cpp:13:9: warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
13 | MEM += f;
| ~~~~^~~~
rect.cpp: In function 'void S::finit(int)':
rect.cpp:43:60: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
43 | inline void finit(const int n) { fmax = n; memset(fw, 0, n + 1 << 2); }
| ~~^~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
295160 KB |
Output is correct |
2 |
Correct |
193 ms |
295416 KB |
Output is correct |
3 |
Correct |
195 ms |
295288 KB |
Output is correct |
4 |
Correct |
199 ms |
295288 KB |
Output is correct |
5 |
Correct |
217 ms |
295160 KB |
Output is correct |
6 |
Correct |
199 ms |
295176 KB |
Output is correct |
7 |
Correct |
194 ms |
295288 KB |
Output is correct |
8 |
Correct |
216 ms |
295160 KB |
Output is correct |
9 |
Correct |
197 ms |
295180 KB |
Output is correct |
10 |
Correct |
213 ms |
295164 KB |
Output is correct |
11 |
Correct |
196 ms |
295260 KB |
Output is correct |
12 |
Correct |
201 ms |
295192 KB |
Output is correct |
13 |
Correct |
232 ms |
295160 KB |
Output is correct |
14 |
Correct |
197 ms |
295160 KB |
Output is correct |
15 |
Correct |
207 ms |
295160 KB |
Output is correct |
16 |
Correct |
201 ms |
295068 KB |
Output is correct |
17 |
Correct |
205 ms |
295160 KB |
Output is correct |
18 |
Correct |
211 ms |
295156 KB |
Output is correct |
19 |
Correct |
196 ms |
295176 KB |
Output is correct |
20 |
Correct |
191 ms |
295180 KB |
Output is correct |
21 |
Correct |
197 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
295160 KB |
Output is correct |
2 |
Correct |
193 ms |
295416 KB |
Output is correct |
3 |
Correct |
195 ms |
295288 KB |
Output is correct |
4 |
Correct |
199 ms |
295288 KB |
Output is correct |
5 |
Correct |
217 ms |
295160 KB |
Output is correct |
6 |
Correct |
199 ms |
295176 KB |
Output is correct |
7 |
Correct |
194 ms |
295288 KB |
Output is correct |
8 |
Correct |
216 ms |
295160 KB |
Output is correct |
9 |
Correct |
197 ms |
295180 KB |
Output is correct |
10 |
Correct |
213 ms |
295164 KB |
Output is correct |
11 |
Correct |
196 ms |
295260 KB |
Output is correct |
12 |
Correct |
201 ms |
295192 KB |
Output is correct |
13 |
Correct |
232 ms |
295160 KB |
Output is correct |
14 |
Correct |
197 ms |
295160 KB |
Output is correct |
15 |
Correct |
207 ms |
295160 KB |
Output is correct |
16 |
Correct |
201 ms |
295068 KB |
Output is correct |
17 |
Correct |
217 ms |
295800 KB |
Output is correct |
18 |
Correct |
245 ms |
295932 KB |
Output is correct |
19 |
Correct |
205 ms |
295804 KB |
Output is correct |
20 |
Correct |
212 ms |
295476 KB |
Output is correct |
21 |
Correct |
202 ms |
295672 KB |
Output is correct |
22 |
Correct |
220 ms |
295768 KB |
Output is correct |
23 |
Correct |
195 ms |
295672 KB |
Output is correct |
24 |
Correct |
190 ms |
295416 KB |
Output is correct |
25 |
Correct |
205 ms |
295160 KB |
Output is correct |
26 |
Correct |
211 ms |
295156 KB |
Output is correct |
27 |
Correct |
196 ms |
295176 KB |
Output is correct |
28 |
Correct |
191 ms |
295180 KB |
Output is correct |
29 |
Correct |
197 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
295160 KB |
Output is correct |
2 |
Correct |
193 ms |
295416 KB |
Output is correct |
3 |
Correct |
195 ms |
295288 KB |
Output is correct |
4 |
Correct |
199 ms |
295288 KB |
Output is correct |
5 |
Correct |
217 ms |
295160 KB |
Output is correct |
6 |
Correct |
199 ms |
295176 KB |
Output is correct |
7 |
Correct |
194 ms |
295288 KB |
Output is correct |
8 |
Correct |
216 ms |
295160 KB |
Output is correct |
9 |
Correct |
197 ms |
295180 KB |
Output is correct |
10 |
Correct |
213 ms |
295164 KB |
Output is correct |
11 |
Correct |
196 ms |
295260 KB |
Output is correct |
12 |
Correct |
201 ms |
295192 KB |
Output is correct |
13 |
Correct |
232 ms |
295160 KB |
Output is correct |
14 |
Correct |
197 ms |
295160 KB |
Output is correct |
15 |
Correct |
207 ms |
295160 KB |
Output is correct |
16 |
Correct |
201 ms |
295068 KB |
Output is correct |
17 |
Correct |
217 ms |
295800 KB |
Output is correct |
18 |
Correct |
245 ms |
295932 KB |
Output is correct |
19 |
Correct |
205 ms |
295804 KB |
Output is correct |
20 |
Correct |
212 ms |
295476 KB |
Output is correct |
21 |
Correct |
202 ms |
295672 KB |
Output is correct |
22 |
Correct |
220 ms |
295768 KB |
Output is correct |
23 |
Correct |
195 ms |
295672 KB |
Output is correct |
24 |
Correct |
190 ms |
295416 KB |
Output is correct |
25 |
Correct |
204 ms |
299140 KB |
Output is correct |
26 |
Correct |
205 ms |
299128 KB |
Output is correct |
27 |
Correct |
202 ms |
299256 KB |
Output is correct |
28 |
Correct |
209 ms |
296852 KB |
Output is correct |
29 |
Correct |
202 ms |
299000 KB |
Output is correct |
30 |
Correct |
208 ms |
299000 KB |
Output is correct |
31 |
Correct |
203 ms |
298872 KB |
Output is correct |
32 |
Correct |
216 ms |
298748 KB |
Output is correct |
33 |
Correct |
205 ms |
295160 KB |
Output is correct |
34 |
Correct |
211 ms |
295156 KB |
Output is correct |
35 |
Correct |
196 ms |
295176 KB |
Output is correct |
36 |
Correct |
191 ms |
295180 KB |
Output is correct |
37 |
Correct |
197 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
295160 KB |
Output is correct |
2 |
Correct |
193 ms |
295416 KB |
Output is correct |
3 |
Correct |
195 ms |
295288 KB |
Output is correct |
4 |
Correct |
199 ms |
295288 KB |
Output is correct |
5 |
Correct |
217 ms |
295160 KB |
Output is correct |
6 |
Correct |
199 ms |
295176 KB |
Output is correct |
7 |
Correct |
194 ms |
295288 KB |
Output is correct |
8 |
Correct |
216 ms |
295160 KB |
Output is correct |
9 |
Correct |
197 ms |
295180 KB |
Output is correct |
10 |
Correct |
213 ms |
295164 KB |
Output is correct |
11 |
Correct |
196 ms |
295260 KB |
Output is correct |
12 |
Correct |
201 ms |
295192 KB |
Output is correct |
13 |
Correct |
232 ms |
295160 KB |
Output is correct |
14 |
Correct |
197 ms |
295160 KB |
Output is correct |
15 |
Correct |
207 ms |
295160 KB |
Output is correct |
16 |
Correct |
201 ms |
295068 KB |
Output is correct |
17 |
Correct |
217 ms |
295800 KB |
Output is correct |
18 |
Correct |
245 ms |
295932 KB |
Output is correct |
19 |
Correct |
205 ms |
295804 KB |
Output is correct |
20 |
Correct |
212 ms |
295476 KB |
Output is correct |
21 |
Correct |
202 ms |
295672 KB |
Output is correct |
22 |
Correct |
220 ms |
295768 KB |
Output is correct |
23 |
Correct |
195 ms |
295672 KB |
Output is correct |
24 |
Correct |
190 ms |
295416 KB |
Output is correct |
25 |
Correct |
204 ms |
299140 KB |
Output is correct |
26 |
Correct |
205 ms |
299128 KB |
Output is correct |
27 |
Correct |
202 ms |
299256 KB |
Output is correct |
28 |
Correct |
209 ms |
296852 KB |
Output is correct |
29 |
Correct |
202 ms |
299000 KB |
Output is correct |
30 |
Correct |
208 ms |
299000 KB |
Output is correct |
31 |
Correct |
203 ms |
298872 KB |
Output is correct |
32 |
Correct |
216 ms |
298748 KB |
Output is correct |
33 |
Correct |
375 ms |
322056 KB |
Output is correct |
34 |
Correct |
320 ms |
322044 KB |
Output is correct |
35 |
Correct |
323 ms |
321960 KB |
Output is correct |
36 |
Correct |
301 ms |
321916 KB |
Output is correct |
37 |
Correct |
358 ms |
344824 KB |
Output is correct |
38 |
Correct |
355 ms |
344844 KB |
Output is correct |
39 |
Correct |
373 ms |
344824 KB |
Output is correct |
40 |
Correct |
347 ms |
341624 KB |
Output is correct |
41 |
Correct |
312 ms |
310520 KB |
Output is correct |
42 |
Correct |
376 ms |
316792 KB |
Output is correct |
43 |
Correct |
489 ms |
343544 KB |
Output is correct |
44 |
Correct |
513 ms |
344056 KB |
Output is correct |
45 |
Correct |
318 ms |
319480 KB |
Output is correct |
46 |
Correct |
319 ms |
319480 KB |
Output is correct |
47 |
Correct |
533 ms |
340372 KB |
Output is correct |
48 |
Correct |
622 ms |
340472 KB |
Output is correct |
49 |
Correct |
205 ms |
295160 KB |
Output is correct |
50 |
Correct |
211 ms |
295156 KB |
Output is correct |
51 |
Correct |
196 ms |
295176 KB |
Output is correct |
52 |
Correct |
191 ms |
295180 KB |
Output is correct |
53 |
Correct |
197 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
239 ms |
295544 KB |
Output is correct |
2 |
Correct |
224 ms |
295544 KB |
Output is correct |
3 |
Correct |
188 ms |
295416 KB |
Output is correct |
4 |
Correct |
251 ms |
295160 KB |
Output is correct |
5 |
Correct |
193 ms |
295416 KB |
Output is correct |
6 |
Correct |
200 ms |
295416 KB |
Output is correct |
7 |
Correct |
190 ms |
295544 KB |
Output is correct |
8 |
Correct |
187 ms |
295416 KB |
Output is correct |
9 |
Correct |
189 ms |
295460 KB |
Output is correct |
10 |
Correct |
188 ms |
295288 KB |
Output is correct |
11 |
Correct |
188 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
186 ms |
295160 KB |
Output is correct |
2 |
Correct |
982 ms |
384712 KB |
Output is correct |
3 |
Correct |
2232 ms |
489664 KB |
Output is correct |
4 |
Correct |
2121 ms |
490628 KB |
Output is correct |
5 |
Correct |
1829 ms |
490680 KB |
Output is correct |
6 |
Correct |
632 ms |
319408 KB |
Output is correct |
7 |
Correct |
1198 ms |
341240 KB |
Output is correct |
8 |
Correct |
1158 ms |
344312 KB |
Output is correct |
9 |
Correct |
205 ms |
295160 KB |
Output is correct |
10 |
Correct |
211 ms |
295156 KB |
Output is correct |
11 |
Correct |
196 ms |
295176 KB |
Output is correct |
12 |
Correct |
191 ms |
295180 KB |
Output is correct |
13 |
Correct |
197 ms |
295160 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
199 ms |
295160 KB |
Output is correct |
2 |
Correct |
193 ms |
295416 KB |
Output is correct |
3 |
Correct |
195 ms |
295288 KB |
Output is correct |
4 |
Correct |
199 ms |
295288 KB |
Output is correct |
5 |
Correct |
217 ms |
295160 KB |
Output is correct |
6 |
Correct |
199 ms |
295176 KB |
Output is correct |
7 |
Correct |
194 ms |
295288 KB |
Output is correct |
8 |
Correct |
216 ms |
295160 KB |
Output is correct |
9 |
Correct |
197 ms |
295180 KB |
Output is correct |
10 |
Correct |
213 ms |
295164 KB |
Output is correct |
11 |
Correct |
196 ms |
295260 KB |
Output is correct |
12 |
Correct |
201 ms |
295192 KB |
Output is correct |
13 |
Correct |
232 ms |
295160 KB |
Output is correct |
14 |
Correct |
197 ms |
295160 KB |
Output is correct |
15 |
Correct |
207 ms |
295160 KB |
Output is correct |
16 |
Correct |
201 ms |
295068 KB |
Output is correct |
17 |
Correct |
217 ms |
295800 KB |
Output is correct |
18 |
Correct |
245 ms |
295932 KB |
Output is correct |
19 |
Correct |
205 ms |
295804 KB |
Output is correct |
20 |
Correct |
212 ms |
295476 KB |
Output is correct |
21 |
Correct |
202 ms |
295672 KB |
Output is correct |
22 |
Correct |
220 ms |
295768 KB |
Output is correct |
23 |
Correct |
195 ms |
295672 KB |
Output is correct |
24 |
Correct |
190 ms |
295416 KB |
Output is correct |
25 |
Correct |
204 ms |
299140 KB |
Output is correct |
26 |
Correct |
205 ms |
299128 KB |
Output is correct |
27 |
Correct |
202 ms |
299256 KB |
Output is correct |
28 |
Correct |
209 ms |
296852 KB |
Output is correct |
29 |
Correct |
202 ms |
299000 KB |
Output is correct |
30 |
Correct |
208 ms |
299000 KB |
Output is correct |
31 |
Correct |
203 ms |
298872 KB |
Output is correct |
32 |
Correct |
216 ms |
298748 KB |
Output is correct |
33 |
Correct |
375 ms |
322056 KB |
Output is correct |
34 |
Correct |
320 ms |
322044 KB |
Output is correct |
35 |
Correct |
323 ms |
321960 KB |
Output is correct |
36 |
Correct |
301 ms |
321916 KB |
Output is correct |
37 |
Correct |
358 ms |
344824 KB |
Output is correct |
38 |
Correct |
355 ms |
344844 KB |
Output is correct |
39 |
Correct |
373 ms |
344824 KB |
Output is correct |
40 |
Correct |
347 ms |
341624 KB |
Output is correct |
41 |
Correct |
312 ms |
310520 KB |
Output is correct |
42 |
Correct |
376 ms |
316792 KB |
Output is correct |
43 |
Correct |
489 ms |
343544 KB |
Output is correct |
44 |
Correct |
513 ms |
344056 KB |
Output is correct |
45 |
Correct |
318 ms |
319480 KB |
Output is correct |
46 |
Correct |
319 ms |
319480 KB |
Output is correct |
47 |
Correct |
533 ms |
340372 KB |
Output is correct |
48 |
Correct |
622 ms |
340472 KB |
Output is correct |
49 |
Correct |
239 ms |
295544 KB |
Output is correct |
50 |
Correct |
224 ms |
295544 KB |
Output is correct |
51 |
Correct |
188 ms |
295416 KB |
Output is correct |
52 |
Correct |
251 ms |
295160 KB |
Output is correct |
53 |
Correct |
193 ms |
295416 KB |
Output is correct |
54 |
Correct |
200 ms |
295416 KB |
Output is correct |
55 |
Correct |
190 ms |
295544 KB |
Output is correct |
56 |
Correct |
187 ms |
295416 KB |
Output is correct |
57 |
Correct |
189 ms |
295460 KB |
Output is correct |
58 |
Correct |
188 ms |
295288 KB |
Output is correct |
59 |
Correct |
188 ms |
295160 KB |
Output is correct |
60 |
Correct |
186 ms |
295160 KB |
Output is correct |
61 |
Correct |
982 ms |
384712 KB |
Output is correct |
62 |
Correct |
2232 ms |
489664 KB |
Output is correct |
63 |
Correct |
2121 ms |
490628 KB |
Output is correct |
64 |
Correct |
1829 ms |
490680 KB |
Output is correct |
65 |
Correct |
632 ms |
319408 KB |
Output is correct |
66 |
Correct |
1198 ms |
341240 KB |
Output is correct |
67 |
Correct |
1158 ms |
344312 KB |
Output is correct |
68 |
Correct |
2556 ms |
637592 KB |
Output is correct |
69 |
Correct |
2478 ms |
639156 KB |
Output is correct |
70 |
Correct |
2782 ms |
639608 KB |
Output is correct |
71 |
Correct |
2298 ms |
639900 KB |
Output is correct |
72 |
Correct |
4461 ms |
932188 KB |
Output is correct |
73 |
Correct |
4051 ms |
682328 KB |
Output is correct |
74 |
Correct |
3581 ms |
695932 KB |
Output is correct |
75 |
Correct |
4785 ms |
921596 KB |
Output is correct |
76 |
Correct |
2993 ms |
702380 KB |
Output is correct |
77 |
Correct |
3783 ms |
818296 KB |
Output is correct |
78 |
Correct |
4767 ms |
932456 KB |
Output is correct |
79 |
Correct |
2605 ms |
649272 KB |
Output is correct |
80 |
Correct |
4497 ms |
891680 KB |
Output is correct |
81 |
Correct |
4344 ms |
873348 KB |
Output is correct |
82 |
Correct |
2442 ms |
705264 KB |
Output is correct |
83 |
Correct |
4331 ms |
935492 KB |
Output is correct |
84 |
Correct |
4362 ms |
936168 KB |
Output is correct |
85 |
Correct |
4364 ms |
936304 KB |
Output is correct |
86 |
Correct |
205 ms |
295160 KB |
Output is correct |
87 |
Correct |
211 ms |
295156 KB |
Output is correct |
88 |
Correct |
196 ms |
295176 KB |
Output is correct |
89 |
Correct |
191 ms |
295180 KB |
Output is correct |
90 |
Correct |
197 ms |
295160 KB |
Output is correct |