/*
JOISC 17-port_facility
Let's define a graph where each container is a vertex and we draw edges between two containers which can't be put in the same area.
Therefore, the answer will be 2^(number of connected components) or 0 if the graph isn't bipartite(this can be checked beforehand with some simulation).
Since the number of edges can be really big, we need segment tree to reduce the number of edges we are going to use.
*/
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define mod 1000000007
#define dancila 3.14159265359
#define eps 1e-9
// #define fisier 1
using namespace std;
typedef long long ll;
int n;
pair<int, int> bk[1000002];
int poz[2000002];
bool chk(vector <pair <int, int> > v)
{
sort(v.begin(), v.end());
deque<pair <int, int> > d;
for(int i = 0; i < v.size(); i++)
{
while(!d.empty() && d.back().se < v[i].fi)
d.pop_back();
if(!d.empty() && d.back().se < v[i].se)
return 0;
d.push_back(v[i]);
}
return 1;
}
int aint[8000002], aint2[8000002];
void upd(int nod, int st, int dr, int poz, int val)
{
if(st == dr)
{
aint[nod] = val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
upd(nod << 1, st, mid, poz, val);
else
upd(nod << 1|1, mid+1, dr, poz, val);
aint[nod] = max(aint[nod << 1], aint[nod << 1|1]);
}
int query(int nod, int st, int dr, int L, int R)
{
if(dr < L || st > R)
return -(1<<30);
if(L <= st && dr <= R)
return aint[nod];
int mid = (st + dr) / 2;
return max(query(nod << 1, st, mid, L, R), query(nod << 1|1, mid+1, dr, L, R));
}
void upd2(int nod, int st, int dr, int poz, int val)
{
if(st == dr)
{
aint2[nod] = val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
upd2(nod << 1, st, mid, poz, val);
else
upd2(nod << 1|1, mid+1, dr, poz, val);
aint2[nod] = min(aint2[nod << 1], aint2[nod << 1|1]);
}
int query2(int nod, int st, int dr, int L, int R)
{
if(dr < L || st > R)
return (1<<30);
if(L <= st && dr <= R)
return aint2[nod];
int mid = (st + dr) / 2;
return min(query2(nod << 1, st, mid, L, R), query2(nod << 1|1, mid+1, dr, L, R));
}
bool viz[1000002];
bool col[1000002];
void dfs(int nod, int c)
{
viz[nod] = 1;
col[nod] = c;
upd(1, 1, n+n, bk[nod].fi, -(1<<30));
upd2(1, 1, n+n, bk[nod].se, (1<<30));
while(1)
{
int val = (1<<30);
if(bk[nod].fi + 1 <= bk[nod].se - 1)
val = query2(1, 1, n+n, bk[nod].fi + 1, bk[nod].se - 1);
// cout << "A " << nod << " " << val << '\n';
if(val < bk[nod].fi)
dfs(poz[val], c ^ 1);
else
break;
}
while(1)
{
int val = -(1<<30);
if(bk[nod].fi + 1 <= bk[nod].se - 1)
val = query(1, 1, n+n, bk[nod].fi + 1, bk[nod].se - 1);
// cout << "B " << nod << " " << val << '\n';
if(val > bk[nod].se)
dfs(poz[val], c ^ 1);
else
break;
}
}
int main()
{
#ifdef fisier
ifstream f("input.in");
ofstream g("output.out");
#endif
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for(int i = 1; i <= n+n; ++i)
{
upd(1, 1, n+n, i, -(1<<30));
upd2(1, 1, n+n, i, (1<<30));
}
for(int i = 1; i <= n; ++i)
{
cin >> bk[i].fi >> bk[i].se;
poz[bk[i].fi] = poz[bk[i].se] = i;
upd(1, 1, n+n, bk[i].fi, bk[i].se);
upd2(1, 1, n+n, bk[i].se, bk[i].fi);
}
int ans = 1;
for(int i = 1; i <= n; ++i)
if(!viz[i])
{
ans = (ans * 2) % mod;
dfs(i, 0);
}
vector<pair<int, int> >a, b;
for(int i = 1; i <= n; i++)
{
if(col[i])
a.pb({bk[i].fi, bk[i].se});
else
b.pb({bk[i].fi, bk[i].se});
}
if(!chk(a) || !chk(b))
{
cout << 0 << '\n';
return 0;
}
cout << ans << '\n';
return 0;
}
Compilation message
port_facility.cpp: In function 'bool chk(std::vector<std::pair<int, int> >)':
port_facility.cpp:37:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < v.size(); i++)
~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
5 ms |
380 KB |
Output is correct |
3 |
Correct |
4 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
376 KB |
Output is correct |
5 |
Correct |
5 ms |
376 KB |
Output is correct |
6 |
Correct |
5 ms |
376 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
5 ms |
376 KB |
Output is correct |
9 |
Correct |
5 ms |
376 KB |
Output is correct |
10 |
Correct |
5 ms |
376 KB |
Output is correct |
11 |
Correct |
5 ms |
376 KB |
Output is correct |
12 |
Correct |
5 ms |
376 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
5 ms |
376 KB |
Output is correct |
15 |
Correct |
8 ms |
376 KB |
Output is correct |
16 |
Correct |
5 ms |
376 KB |
Output is correct |
17 |
Correct |
5 ms |
376 KB |
Output is correct |
18 |
Correct |
5 ms |
376 KB |
Output is correct |
19 |
Correct |
5 ms |
376 KB |
Output is correct |
20 |
Correct |
5 ms |
376 KB |
Output is correct |
21 |
Correct |
5 ms |
380 KB |
Output is correct |
22 |
Correct |
5 ms |
376 KB |
Output is correct |
23 |
Correct |
5 ms |
376 KB |
Output is correct |
24 |
Correct |
5 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
5 ms |
380 KB |
Output is correct |
3 |
Correct |
4 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
376 KB |
Output is correct |
5 |
Correct |
5 ms |
376 KB |
Output is correct |
6 |
Correct |
5 ms |
376 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
5 ms |
376 KB |
Output is correct |
9 |
Correct |
5 ms |
376 KB |
Output is correct |
10 |
Correct |
5 ms |
376 KB |
Output is correct |
11 |
Correct |
5 ms |
376 KB |
Output is correct |
12 |
Correct |
5 ms |
376 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
5 ms |
376 KB |
Output is correct |
15 |
Correct |
8 ms |
376 KB |
Output is correct |
16 |
Correct |
5 ms |
376 KB |
Output is correct |
17 |
Correct |
5 ms |
376 KB |
Output is correct |
18 |
Correct |
5 ms |
376 KB |
Output is correct |
19 |
Correct |
5 ms |
376 KB |
Output is correct |
20 |
Correct |
5 ms |
376 KB |
Output is correct |
21 |
Correct |
5 ms |
380 KB |
Output is correct |
22 |
Correct |
5 ms |
376 KB |
Output is correct |
23 |
Correct |
5 ms |
376 KB |
Output is correct |
24 |
Correct |
5 ms |
376 KB |
Output is correct |
25 |
Correct |
8 ms |
632 KB |
Output is correct |
26 |
Correct |
8 ms |
632 KB |
Output is correct |
27 |
Correct |
8 ms |
632 KB |
Output is correct |
28 |
Correct |
8 ms |
632 KB |
Output is correct |
29 |
Correct |
9 ms |
632 KB |
Output is correct |
30 |
Correct |
8 ms |
632 KB |
Output is correct |
31 |
Correct |
8 ms |
632 KB |
Output is correct |
32 |
Correct |
8 ms |
632 KB |
Output is correct |
33 |
Correct |
8 ms |
504 KB |
Output is correct |
34 |
Correct |
9 ms |
632 KB |
Output is correct |
35 |
Correct |
7 ms |
504 KB |
Output is correct |
36 |
Correct |
8 ms |
504 KB |
Output is correct |
37 |
Correct |
8 ms |
632 KB |
Output is correct |
38 |
Correct |
7 ms |
632 KB |
Output is correct |
39 |
Correct |
7 ms |
504 KB |
Output is correct |
40 |
Correct |
7 ms |
504 KB |
Output is correct |
41 |
Correct |
8 ms |
632 KB |
Output is correct |
42 |
Correct |
8 ms |
632 KB |
Output is correct |
43 |
Correct |
8 ms |
632 KB |
Output is correct |
44 |
Correct |
7 ms |
760 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
5 ms |
380 KB |
Output is correct |
3 |
Correct |
4 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
376 KB |
Output is correct |
5 |
Correct |
5 ms |
376 KB |
Output is correct |
6 |
Correct |
5 ms |
376 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
5 ms |
376 KB |
Output is correct |
9 |
Correct |
5 ms |
376 KB |
Output is correct |
10 |
Correct |
5 ms |
376 KB |
Output is correct |
11 |
Correct |
5 ms |
376 KB |
Output is correct |
12 |
Correct |
5 ms |
376 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
5 ms |
376 KB |
Output is correct |
15 |
Correct |
8 ms |
376 KB |
Output is correct |
16 |
Correct |
5 ms |
376 KB |
Output is correct |
17 |
Correct |
5 ms |
376 KB |
Output is correct |
18 |
Correct |
5 ms |
376 KB |
Output is correct |
19 |
Correct |
5 ms |
376 KB |
Output is correct |
20 |
Correct |
5 ms |
376 KB |
Output is correct |
21 |
Correct |
5 ms |
380 KB |
Output is correct |
22 |
Correct |
5 ms |
376 KB |
Output is correct |
23 |
Correct |
5 ms |
376 KB |
Output is correct |
24 |
Correct |
5 ms |
376 KB |
Output is correct |
25 |
Correct |
8 ms |
632 KB |
Output is correct |
26 |
Correct |
8 ms |
632 KB |
Output is correct |
27 |
Correct |
8 ms |
632 KB |
Output is correct |
28 |
Correct |
8 ms |
632 KB |
Output is correct |
29 |
Correct |
9 ms |
632 KB |
Output is correct |
30 |
Correct |
8 ms |
632 KB |
Output is correct |
31 |
Correct |
8 ms |
632 KB |
Output is correct |
32 |
Correct |
8 ms |
632 KB |
Output is correct |
33 |
Correct |
8 ms |
504 KB |
Output is correct |
34 |
Correct |
9 ms |
632 KB |
Output is correct |
35 |
Correct |
7 ms |
504 KB |
Output is correct |
36 |
Correct |
8 ms |
504 KB |
Output is correct |
37 |
Correct |
8 ms |
632 KB |
Output is correct |
38 |
Correct |
7 ms |
632 KB |
Output is correct |
39 |
Correct |
7 ms |
504 KB |
Output is correct |
40 |
Correct |
7 ms |
504 KB |
Output is correct |
41 |
Correct |
8 ms |
632 KB |
Output is correct |
42 |
Correct |
8 ms |
632 KB |
Output is correct |
43 |
Correct |
8 ms |
632 KB |
Output is correct |
44 |
Correct |
7 ms |
760 KB |
Output is correct |
45 |
Correct |
206 ms |
10476 KB |
Output is correct |
46 |
Correct |
212 ms |
11500 KB |
Output is correct |
47 |
Correct |
207 ms |
9708 KB |
Output is correct |
48 |
Correct |
210 ms |
11372 KB |
Output is correct |
49 |
Correct |
211 ms |
9832 KB |
Output is correct |
50 |
Correct |
202 ms |
10688 KB |
Output is correct |
51 |
Correct |
198 ms |
10600 KB |
Output is correct |
52 |
Correct |
160 ms |
9196 KB |
Output is correct |
53 |
Correct |
218 ms |
9840 KB |
Output is correct |
54 |
Correct |
206 ms |
16744 KB |
Output is correct |
55 |
Correct |
205 ms |
12684 KB |
Output is correct |
56 |
Correct |
206 ms |
12760 KB |
Output is correct |
57 |
Correct |
202 ms |
9328 KB |
Output is correct |
58 |
Correct |
179 ms |
9192 KB |
Output is correct |
59 |
Correct |
202 ms |
9328 KB |
Output is correct |
60 |
Correct |
213 ms |
9356 KB |
Output is correct |
61 |
Correct |
213 ms |
9204 KB |
Output is correct |
62 |
Correct |
190 ms |
9072 KB |
Output is correct |
63 |
Correct |
198 ms |
9072 KB |
Output is correct |
64 |
Correct |
204 ms |
8688 KB |
Output is correct |
65 |
Correct |
277 ms |
16748 KB |
Output is correct |
66 |
Correct |
249 ms |
16664 KB |
Output is correct |
67 |
Correct |
211 ms |
13388 KB |
Output is correct |
68 |
Correct |
224 ms |
13396 KB |
Output is correct |
69 |
Correct |
221 ms |
13164 KB |
Output is correct |
70 |
Correct |
233 ms |
13004 KB |
Output is correct |
71 |
Correct |
211 ms |
17356 KB |
Output is correct |
72 |
Correct |
206 ms |
17296 KB |
Output is correct |
73 |
Correct |
217 ms |
14548 KB |
Output is correct |
74 |
Correct |
205 ms |
14800 KB |
Output is correct |
75 |
Correct |
188 ms |
13932 KB |
Output is correct |
76 |
Correct |
197 ms |
17112 KB |
Output is correct |
77 |
Correct |
189 ms |
17084 KB |
Output is correct |
78 |
Correct |
209 ms |
11244 KB |
Output is correct |
79 |
Correct |
216 ms |
10476 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
5 ms |
380 KB |
Output is correct |
3 |
Correct |
4 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
376 KB |
Output is correct |
5 |
Correct |
5 ms |
376 KB |
Output is correct |
6 |
Correct |
5 ms |
376 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
5 ms |
376 KB |
Output is correct |
9 |
Correct |
5 ms |
376 KB |
Output is correct |
10 |
Correct |
5 ms |
376 KB |
Output is correct |
11 |
Correct |
5 ms |
376 KB |
Output is correct |
12 |
Correct |
5 ms |
376 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
5 ms |
376 KB |
Output is correct |
15 |
Correct |
8 ms |
376 KB |
Output is correct |
16 |
Correct |
5 ms |
376 KB |
Output is correct |
17 |
Correct |
5 ms |
376 KB |
Output is correct |
18 |
Correct |
5 ms |
376 KB |
Output is correct |
19 |
Correct |
5 ms |
376 KB |
Output is correct |
20 |
Correct |
5 ms |
376 KB |
Output is correct |
21 |
Correct |
5 ms |
380 KB |
Output is correct |
22 |
Correct |
5 ms |
376 KB |
Output is correct |
23 |
Correct |
5 ms |
376 KB |
Output is correct |
24 |
Correct |
5 ms |
376 KB |
Output is correct |
25 |
Correct |
8 ms |
632 KB |
Output is correct |
26 |
Correct |
8 ms |
632 KB |
Output is correct |
27 |
Correct |
8 ms |
632 KB |
Output is correct |
28 |
Correct |
8 ms |
632 KB |
Output is correct |
29 |
Correct |
9 ms |
632 KB |
Output is correct |
30 |
Correct |
8 ms |
632 KB |
Output is correct |
31 |
Correct |
8 ms |
632 KB |
Output is correct |
32 |
Correct |
8 ms |
632 KB |
Output is correct |
33 |
Correct |
8 ms |
504 KB |
Output is correct |
34 |
Correct |
9 ms |
632 KB |
Output is correct |
35 |
Correct |
7 ms |
504 KB |
Output is correct |
36 |
Correct |
8 ms |
504 KB |
Output is correct |
37 |
Correct |
8 ms |
632 KB |
Output is correct |
38 |
Correct |
7 ms |
632 KB |
Output is correct |
39 |
Correct |
7 ms |
504 KB |
Output is correct |
40 |
Correct |
7 ms |
504 KB |
Output is correct |
41 |
Correct |
8 ms |
632 KB |
Output is correct |
42 |
Correct |
8 ms |
632 KB |
Output is correct |
43 |
Correct |
8 ms |
632 KB |
Output is correct |
44 |
Correct |
7 ms |
760 KB |
Output is correct |
45 |
Correct |
206 ms |
10476 KB |
Output is correct |
46 |
Correct |
212 ms |
11500 KB |
Output is correct |
47 |
Correct |
207 ms |
9708 KB |
Output is correct |
48 |
Correct |
210 ms |
11372 KB |
Output is correct |
49 |
Correct |
211 ms |
9832 KB |
Output is correct |
50 |
Correct |
202 ms |
10688 KB |
Output is correct |
51 |
Correct |
198 ms |
10600 KB |
Output is correct |
52 |
Correct |
160 ms |
9196 KB |
Output is correct |
53 |
Correct |
218 ms |
9840 KB |
Output is correct |
54 |
Correct |
206 ms |
16744 KB |
Output is correct |
55 |
Correct |
205 ms |
12684 KB |
Output is correct |
56 |
Correct |
206 ms |
12760 KB |
Output is correct |
57 |
Correct |
202 ms |
9328 KB |
Output is correct |
58 |
Correct |
179 ms |
9192 KB |
Output is correct |
59 |
Correct |
202 ms |
9328 KB |
Output is correct |
60 |
Correct |
213 ms |
9356 KB |
Output is correct |
61 |
Correct |
213 ms |
9204 KB |
Output is correct |
62 |
Correct |
190 ms |
9072 KB |
Output is correct |
63 |
Correct |
198 ms |
9072 KB |
Output is correct |
64 |
Correct |
204 ms |
8688 KB |
Output is correct |
65 |
Correct |
277 ms |
16748 KB |
Output is correct |
66 |
Correct |
249 ms |
16664 KB |
Output is correct |
67 |
Correct |
211 ms |
13388 KB |
Output is correct |
68 |
Correct |
224 ms |
13396 KB |
Output is correct |
69 |
Correct |
221 ms |
13164 KB |
Output is correct |
70 |
Correct |
233 ms |
13004 KB |
Output is correct |
71 |
Correct |
211 ms |
17356 KB |
Output is correct |
72 |
Correct |
206 ms |
17296 KB |
Output is correct |
73 |
Correct |
217 ms |
14548 KB |
Output is correct |
74 |
Correct |
205 ms |
14800 KB |
Output is correct |
75 |
Correct |
188 ms |
13932 KB |
Output is correct |
76 |
Correct |
197 ms |
17112 KB |
Output is correct |
77 |
Correct |
189 ms |
17084 KB |
Output is correct |
78 |
Correct |
209 ms |
11244 KB |
Output is correct |
79 |
Correct |
216 ms |
10476 KB |
Output is correct |
80 |
Correct |
2682 ms |
88000 KB |
Output is correct |
81 |
Correct |
2754 ms |
86964 KB |
Output is correct |
82 |
Correct |
2613 ms |
83864 KB |
Output is correct |
83 |
Correct |
2631 ms |
87100 KB |
Output is correct |
84 |
Correct |
2657 ms |
87900 KB |
Output is correct |
85 |
Correct |
2604 ms |
79044 KB |
Output is correct |
86 |
Correct |
2636 ms |
82112 KB |
Output is correct |
87 |
Correct |
2213 ms |
81108 KB |
Output is correct |
88 |
Correct |
3364 ms |
89304 KB |
Output is correct |
89 |
Correct |
2786 ms |
155612 KB |
Output is correct |
90 |
Correct |
2776 ms |
116352 KB |
Output is correct |
91 |
Correct |
2745 ms |
116404 KB |
Output is correct |
92 |
Correct |
2761 ms |
81160 KB |
Output is correct |
93 |
Correct |
2427 ms |
81112 KB |
Output is correct |
94 |
Correct |
2835 ms |
83208 KB |
Output is correct |
95 |
Correct |
2800 ms |
82736 KB |
Output is correct |
96 |
Correct |
2648 ms |
82496 KB |
Output is correct |
97 |
Correct |
2594 ms |
75268 KB |
Output is correct |
98 |
Correct |
2707 ms |
82320 KB |
Output is correct |
99 |
Correct |
2564 ms |
76612 KB |
Output is correct |
100 |
Correct |
3696 ms |
155524 KB |
Output is correct |
101 |
Correct |
3768 ms |
155596 KB |
Output is correct |
102 |
Correct |
2801 ms |
124472 KB |
Output is correct |
103 |
Correct |
2888 ms |
124344 KB |
Output is correct |
104 |
Correct |
2774 ms |
118700 KB |
Output is correct |
105 |
Correct |
2777 ms |
121300 KB |
Output is correct |
106 |
Correct |
2742 ms |
163516 KB |
Output is correct |
107 |
Correct |
2725 ms |
163516 KB |
Output is correct |
108 |
Correct |
2651 ms |
138676 KB |
Output is correct |
109 |
Correct |
2713 ms |
138680 KB |
Output is correct |
110 |
Correct |
2478 ms |
157876 KB |
Output is correct |
111 |
Correct |
2415 ms |
159456 KB |
Output is correct |
112 |
Correct |
2479 ms |
159648 KB |
Output is correct |
113 |
Correct |
2645 ms |
83864 KB |
Output is correct |
114 |
Correct |
2727 ms |
86844 KB |
Output is correct |