# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
274096 |
2020-08-19T08:28:20 Z |
ne4eHbKa |
Rectangles (IOI19_rect) |
C++17 |
|
5000 ms |
540176 KB |
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
#define ft first
#define sd second
#define _ <<' '<<
#pragma GCC optimize("Ofast,O3")
namespace S {
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<int> l[N][N], u[N][N];
int p[N], length[N], la[N];
map<int, int> fl[N];
vector<bool> mk;
int f[N * 5], fmax;
void finit(int n) { fmax = n; memset(f, 0, n + 1 << 2); }
void fadd(int i) { for(i = fmax - i; i <= fmax; i += i & -i) f[i]++; }
int fget(int i) { int v{}; for(i = fmax - i; i; i -= i & -i) v += f[i]; return v; }
int get(map<int, int> &a, int b) {
const auto f = a.find(b);
if(f == a.end()) return 0;
return f->sd;
}
ll solve() {
ll ans = 0;
map<int, int> cl, fu, cu;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
swap(cl, fl[j]);
for(const int &t : l[i][j])
fl[j][t] = get(cl, t) + 1;
cl.clear();
swap(cu, fu);
for(const int &t : u[i][j])
fu[t] = get(cu, t) + 1;
cu.clear();
vi c;
const auto &A = fl[j], &B = fu;
if(A.size() * B.size() < 10) {
for(const auto &i : A) {
for(const auto &j : B) {
if(i.ft <= j.sd && j.ft <= i.sd)
++ans;
}
}
continue;
}
c.reserve(A.size() + B.size() << 1);
for(const auto &i : A) {
c.push_back(i.ft);
c.push_back(i.sd);
}
for(const auto &i : B) {
c.push_back(i.ft);
c.push_back(i.sd);
}
sort(c.begin(), c.end());
c.resize(unique(c.begin(), c.end()) - c.begin());
finit(c.size());
list<pii> a, b;
auto find = [&] (const int &z) {return lower_bound(c.begin(), c.end(), z) - c.begin();};
for(const auto &i : A) a.push_back({find(i.sd), find(i.ft)});
for(const auto &i : B) b.push_back({find(i.ft), find(i.sd)});
a.sort();
auto it = b.begin();
for(const auto t : a) {
for(; it != b.end() && it->ft <= t.ft; ++it)
fadd(it->sd);
ans += fget(t.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);
mk.assign(m, false);
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]];
list<int> f;
for(; t < m && a[i][p[t]] == v; ++t) {
int j = p[t];
mk[j] = true;
length[j] = 1;
f.push_back(j);
if(j + 1 < m && mk[j + 1]) unite(j, j + 1);
if(j && mk[j - 1]) unite(j - 1, j);
}
for(int i : f) mk[last(i)] = false;
for(int j : f) {
j = last(j);
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);
mk.assign(n, false);
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];
list<int> f;
for(; t < n && a[p[t]][j] == v; ++t) {
int i = p[t];
mk[i] = true;
length[i] = 1;
f.push_back(i);
if(i + 1 < n && mk[i + 1]) unite(i, i + 1);
if(i && mk[i - 1]) unite(i - 1, i);
}
for(int j : f) mk[last(j)] = false;
for(int i : f) {
i = last(i);
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 S::finit(int)':
rect.cpp:27:46: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
27 | void finit(int n) { fmax = n; memset(f, 0, n + 1 << 2); }
| ~~^~~
rect.cpp: In function 'S::ll S::solve()':
rect.cpp:61:32: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
61 | c.reserve(A.size() + B.size() << 1);
| ~~~~~~~~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
203 ms |
295160 KB |
Output is correct |
2 |
Correct |
203 ms |
295160 KB |
Output is correct |
3 |
Correct |
250 ms |
295164 KB |
Output is correct |
4 |
Correct |
221 ms |
295264 KB |
Output is correct |
5 |
Correct |
197 ms |
295160 KB |
Output is correct |
6 |
Correct |
217 ms |
295160 KB |
Output is correct |
7 |
Correct |
204 ms |
295160 KB |
Output is correct |
8 |
Correct |
209 ms |
295160 KB |
Output is correct |
9 |
Correct |
222 ms |
295136 KB |
Output is correct |
10 |
Correct |
227 ms |
295220 KB |
Output is correct |
11 |
Correct |
211 ms |
295176 KB |
Output is correct |
12 |
Correct |
210 ms |
295144 KB |
Output is correct |
13 |
Correct |
217 ms |
295112 KB |
Output is correct |
14 |
Correct |
205 ms |
295160 KB |
Output is correct |
15 |
Correct |
223 ms |
295160 KB |
Output is correct |
16 |
Correct |
216 ms |
295164 KB |
Output is correct |
17 |
Correct |
211 ms |
295160 KB |
Output is correct |
18 |
Correct |
212 ms |
295160 KB |
Output is correct |
19 |
Correct |
218 ms |
295208 KB |
Output is correct |
20 |
Correct |
204 ms |
295240 KB |
Output is correct |
21 |
Correct |
267 ms |
295168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
203 ms |
295160 KB |
Output is correct |
2 |
Correct |
203 ms |
295160 KB |
Output is correct |
3 |
Correct |
250 ms |
295164 KB |
Output is correct |
4 |
Correct |
221 ms |
295264 KB |
Output is correct |
5 |
Correct |
197 ms |
295160 KB |
Output is correct |
6 |
Correct |
217 ms |
295160 KB |
Output is correct |
7 |
Correct |
204 ms |
295160 KB |
Output is correct |
8 |
Correct |
209 ms |
295160 KB |
Output is correct |
9 |
Correct |
222 ms |
295136 KB |
Output is correct |
10 |
Correct |
227 ms |
295220 KB |
Output is correct |
11 |
Correct |
211 ms |
295176 KB |
Output is correct |
12 |
Correct |
210 ms |
295144 KB |
Output is correct |
13 |
Correct |
217 ms |
295112 KB |
Output is correct |
14 |
Correct |
205 ms |
295160 KB |
Output is correct |
15 |
Correct |
223 ms |
295160 KB |
Output is correct |
16 |
Correct |
216 ms |
295164 KB |
Output is correct |
17 |
Correct |
257 ms |
295604 KB |
Output is correct |
18 |
Correct |
209 ms |
295544 KB |
Output is correct |
19 |
Correct |
208 ms |
295584 KB |
Output is correct |
20 |
Correct |
216 ms |
295416 KB |
Output is correct |
21 |
Correct |
241 ms |
295492 KB |
Output is correct |
22 |
Correct |
262 ms |
295540 KB |
Output is correct |
23 |
Correct |
206 ms |
295484 KB |
Output is correct |
24 |
Correct |
210 ms |
295332 KB |
Output is correct |
25 |
Correct |
211 ms |
295160 KB |
Output is correct |
26 |
Correct |
212 ms |
295160 KB |
Output is correct |
27 |
Correct |
218 ms |
295208 KB |
Output is correct |
28 |
Correct |
204 ms |
295240 KB |
Output is correct |
29 |
Correct |
267 ms |
295168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
203 ms |
295160 KB |
Output is correct |
2 |
Correct |
203 ms |
295160 KB |
Output is correct |
3 |
Correct |
250 ms |
295164 KB |
Output is correct |
4 |
Correct |
221 ms |
295264 KB |
Output is correct |
5 |
Correct |
197 ms |
295160 KB |
Output is correct |
6 |
Correct |
217 ms |
295160 KB |
Output is correct |
7 |
Correct |
204 ms |
295160 KB |
Output is correct |
8 |
Correct |
209 ms |
295160 KB |
Output is correct |
9 |
Correct |
222 ms |
295136 KB |
Output is correct |
10 |
Correct |
227 ms |
295220 KB |
Output is correct |
11 |
Correct |
211 ms |
295176 KB |
Output is correct |
12 |
Correct |
210 ms |
295144 KB |
Output is correct |
13 |
Correct |
217 ms |
295112 KB |
Output is correct |
14 |
Correct |
205 ms |
295160 KB |
Output is correct |
15 |
Correct |
223 ms |
295160 KB |
Output is correct |
16 |
Correct |
216 ms |
295164 KB |
Output is correct |
17 |
Correct |
257 ms |
295604 KB |
Output is correct |
18 |
Correct |
209 ms |
295544 KB |
Output is correct |
19 |
Correct |
208 ms |
295584 KB |
Output is correct |
20 |
Correct |
216 ms |
295416 KB |
Output is correct |
21 |
Correct |
241 ms |
295492 KB |
Output is correct |
22 |
Correct |
262 ms |
295540 KB |
Output is correct |
23 |
Correct |
206 ms |
295484 KB |
Output is correct |
24 |
Correct |
210 ms |
295332 KB |
Output is correct |
25 |
Correct |
287 ms |
297976 KB |
Output is correct |
26 |
Correct |
322 ms |
298000 KB |
Output is correct |
27 |
Correct |
236 ms |
297976 KB |
Output is correct |
28 |
Correct |
238 ms |
296440 KB |
Output is correct |
29 |
Correct |
251 ms |
297844 KB |
Output is correct |
30 |
Correct |
244 ms |
297928 KB |
Output is correct |
31 |
Correct |
240 ms |
297740 KB |
Output is correct |
32 |
Correct |
235 ms |
297720 KB |
Output is correct |
33 |
Correct |
211 ms |
295160 KB |
Output is correct |
34 |
Correct |
212 ms |
295160 KB |
Output is correct |
35 |
Correct |
218 ms |
295208 KB |
Output is correct |
36 |
Correct |
204 ms |
295240 KB |
Output is correct |
37 |
Correct |
267 ms |
295168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
203 ms |
295160 KB |
Output is correct |
2 |
Correct |
203 ms |
295160 KB |
Output is correct |
3 |
Correct |
250 ms |
295164 KB |
Output is correct |
4 |
Correct |
221 ms |
295264 KB |
Output is correct |
5 |
Correct |
197 ms |
295160 KB |
Output is correct |
6 |
Correct |
217 ms |
295160 KB |
Output is correct |
7 |
Correct |
204 ms |
295160 KB |
Output is correct |
8 |
Correct |
209 ms |
295160 KB |
Output is correct |
9 |
Correct |
222 ms |
295136 KB |
Output is correct |
10 |
Correct |
227 ms |
295220 KB |
Output is correct |
11 |
Correct |
211 ms |
295176 KB |
Output is correct |
12 |
Correct |
210 ms |
295144 KB |
Output is correct |
13 |
Correct |
217 ms |
295112 KB |
Output is correct |
14 |
Correct |
205 ms |
295160 KB |
Output is correct |
15 |
Correct |
223 ms |
295160 KB |
Output is correct |
16 |
Correct |
216 ms |
295164 KB |
Output is correct |
17 |
Correct |
257 ms |
295604 KB |
Output is correct |
18 |
Correct |
209 ms |
295544 KB |
Output is correct |
19 |
Correct |
208 ms |
295584 KB |
Output is correct |
20 |
Correct |
216 ms |
295416 KB |
Output is correct |
21 |
Correct |
241 ms |
295492 KB |
Output is correct |
22 |
Correct |
262 ms |
295540 KB |
Output is correct |
23 |
Correct |
206 ms |
295484 KB |
Output is correct |
24 |
Correct |
210 ms |
295332 KB |
Output is correct |
25 |
Correct |
287 ms |
297976 KB |
Output is correct |
26 |
Correct |
322 ms |
298000 KB |
Output is correct |
27 |
Correct |
236 ms |
297976 KB |
Output is correct |
28 |
Correct |
238 ms |
296440 KB |
Output is correct |
29 |
Correct |
251 ms |
297844 KB |
Output is correct |
30 |
Correct |
244 ms |
297928 KB |
Output is correct |
31 |
Correct |
240 ms |
297740 KB |
Output is correct |
32 |
Correct |
235 ms |
297720 KB |
Output is correct |
33 |
Correct |
545 ms |
314488 KB |
Output is correct |
34 |
Correct |
491 ms |
314488 KB |
Output is correct |
35 |
Correct |
486 ms |
314380 KB |
Output is correct |
36 |
Correct |
462 ms |
314504 KB |
Output is correct |
37 |
Correct |
621 ms |
329976 KB |
Output is correct |
38 |
Correct |
604 ms |
329720 KB |
Output is correct |
39 |
Correct |
618 ms |
329776 KB |
Output is correct |
40 |
Correct |
616 ms |
327616 KB |
Output is correct |
41 |
Correct |
401 ms |
306808 KB |
Output is correct |
42 |
Correct |
441 ms |
310904 KB |
Output is correct |
43 |
Correct |
703 ms |
328708 KB |
Output is correct |
44 |
Correct |
701 ms |
329196 KB |
Output is correct |
45 |
Correct |
450 ms |
312184 KB |
Output is correct |
46 |
Correct |
453 ms |
312260 KB |
Output is correct |
47 |
Correct |
659 ms |
326668 KB |
Output is correct |
48 |
Correct |
708 ms |
326916 KB |
Output is correct |
49 |
Correct |
211 ms |
295160 KB |
Output is correct |
50 |
Correct |
212 ms |
295160 KB |
Output is correct |
51 |
Correct |
218 ms |
295208 KB |
Output is correct |
52 |
Correct |
204 ms |
295240 KB |
Output is correct |
53 |
Correct |
267 ms |
295168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
226 ms |
295672 KB |
Output is correct |
2 |
Correct |
208 ms |
295544 KB |
Output is correct |
3 |
Correct |
203 ms |
295360 KB |
Output is correct |
4 |
Correct |
199 ms |
295140 KB |
Output is correct |
5 |
Correct |
205 ms |
295416 KB |
Output is correct |
6 |
Correct |
201 ms |
295432 KB |
Output is correct |
7 |
Correct |
210 ms |
295432 KB |
Output is correct |
8 |
Correct |
204 ms |
295416 KB |
Output is correct |
9 |
Correct |
204 ms |
295544 KB |
Output is correct |
10 |
Correct |
201 ms |
295160 KB |
Output is correct |
11 |
Correct |
202 ms |
295216 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
205 ms |
295160 KB |
Output is correct |
2 |
Correct |
1594 ms |
362524 KB |
Output is correct |
3 |
Correct |
3455 ms |
441248 KB |
Output is correct |
4 |
Correct |
3171 ms |
441928 KB |
Output is correct |
5 |
Correct |
3169 ms |
442028 KB |
Output is correct |
6 |
Correct |
990 ms |
319548 KB |
Output is correct |
7 |
Correct |
1908 ms |
341368 KB |
Output is correct |
8 |
Correct |
2017 ms |
344412 KB |
Output is correct |
9 |
Correct |
211 ms |
295160 KB |
Output is correct |
10 |
Correct |
212 ms |
295160 KB |
Output is correct |
11 |
Correct |
218 ms |
295208 KB |
Output is correct |
12 |
Correct |
204 ms |
295240 KB |
Output is correct |
13 |
Correct |
267 ms |
295168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
203 ms |
295160 KB |
Output is correct |
2 |
Correct |
203 ms |
295160 KB |
Output is correct |
3 |
Correct |
250 ms |
295164 KB |
Output is correct |
4 |
Correct |
221 ms |
295264 KB |
Output is correct |
5 |
Correct |
197 ms |
295160 KB |
Output is correct |
6 |
Correct |
217 ms |
295160 KB |
Output is correct |
7 |
Correct |
204 ms |
295160 KB |
Output is correct |
8 |
Correct |
209 ms |
295160 KB |
Output is correct |
9 |
Correct |
222 ms |
295136 KB |
Output is correct |
10 |
Correct |
227 ms |
295220 KB |
Output is correct |
11 |
Correct |
211 ms |
295176 KB |
Output is correct |
12 |
Correct |
210 ms |
295144 KB |
Output is correct |
13 |
Correct |
217 ms |
295112 KB |
Output is correct |
14 |
Correct |
205 ms |
295160 KB |
Output is correct |
15 |
Correct |
223 ms |
295160 KB |
Output is correct |
16 |
Correct |
216 ms |
295164 KB |
Output is correct |
17 |
Correct |
257 ms |
295604 KB |
Output is correct |
18 |
Correct |
209 ms |
295544 KB |
Output is correct |
19 |
Correct |
208 ms |
295584 KB |
Output is correct |
20 |
Correct |
216 ms |
295416 KB |
Output is correct |
21 |
Correct |
241 ms |
295492 KB |
Output is correct |
22 |
Correct |
262 ms |
295540 KB |
Output is correct |
23 |
Correct |
206 ms |
295484 KB |
Output is correct |
24 |
Correct |
210 ms |
295332 KB |
Output is correct |
25 |
Correct |
287 ms |
297976 KB |
Output is correct |
26 |
Correct |
322 ms |
298000 KB |
Output is correct |
27 |
Correct |
236 ms |
297976 KB |
Output is correct |
28 |
Correct |
238 ms |
296440 KB |
Output is correct |
29 |
Correct |
251 ms |
297844 KB |
Output is correct |
30 |
Correct |
244 ms |
297928 KB |
Output is correct |
31 |
Correct |
240 ms |
297740 KB |
Output is correct |
32 |
Correct |
235 ms |
297720 KB |
Output is correct |
33 |
Correct |
545 ms |
314488 KB |
Output is correct |
34 |
Correct |
491 ms |
314488 KB |
Output is correct |
35 |
Correct |
486 ms |
314380 KB |
Output is correct |
36 |
Correct |
462 ms |
314504 KB |
Output is correct |
37 |
Correct |
621 ms |
329976 KB |
Output is correct |
38 |
Correct |
604 ms |
329720 KB |
Output is correct |
39 |
Correct |
618 ms |
329776 KB |
Output is correct |
40 |
Correct |
616 ms |
327616 KB |
Output is correct |
41 |
Correct |
401 ms |
306808 KB |
Output is correct |
42 |
Correct |
441 ms |
310904 KB |
Output is correct |
43 |
Correct |
703 ms |
328708 KB |
Output is correct |
44 |
Correct |
701 ms |
329196 KB |
Output is correct |
45 |
Correct |
450 ms |
312184 KB |
Output is correct |
46 |
Correct |
453 ms |
312260 KB |
Output is correct |
47 |
Correct |
659 ms |
326668 KB |
Output is correct |
48 |
Correct |
708 ms |
326916 KB |
Output is correct |
49 |
Correct |
226 ms |
295672 KB |
Output is correct |
50 |
Correct |
208 ms |
295544 KB |
Output is correct |
51 |
Correct |
203 ms |
295360 KB |
Output is correct |
52 |
Correct |
199 ms |
295140 KB |
Output is correct |
53 |
Correct |
205 ms |
295416 KB |
Output is correct |
54 |
Correct |
201 ms |
295432 KB |
Output is correct |
55 |
Correct |
210 ms |
295432 KB |
Output is correct |
56 |
Correct |
204 ms |
295416 KB |
Output is correct |
57 |
Correct |
204 ms |
295544 KB |
Output is correct |
58 |
Correct |
201 ms |
295160 KB |
Output is correct |
59 |
Correct |
202 ms |
295216 KB |
Output is correct |
60 |
Correct |
205 ms |
295160 KB |
Output is correct |
61 |
Correct |
1594 ms |
362524 KB |
Output is correct |
62 |
Correct |
3455 ms |
441248 KB |
Output is correct |
63 |
Correct |
3171 ms |
441928 KB |
Output is correct |
64 |
Correct |
3169 ms |
442028 KB |
Output is correct |
65 |
Correct |
990 ms |
319548 KB |
Output is correct |
66 |
Correct |
1908 ms |
341368 KB |
Output is correct |
67 |
Correct |
2017 ms |
344412 KB |
Output is correct |
68 |
Execution timed out |
5110 ms |
540176 KB |
Time limit exceeded |
69 |
Halted |
0 ms |
0 KB |
- |