Submission #953474

# Submission time Handle Problem Language Result Execution time Memory
953474 2024-03-26T03:01:49 Z pcc Port Facility (JOI17_port_facility) C++17
100 / 100
1684 ms 189980 KB
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int,int>
#define fs first
#define sc second
#define ll long long

const ll mod = 1e9+7;
const int mxn = 2e6+10;

ll pw(ll a,ll b){
	ll re = 1;
	while(b){
		if(b&1)re = re*a%mod;
		b>>=1;
		a = a*a%mod;
	}
	return re;
}
ll mad(ll a,ll b){
	a += b;
	return a>=mod?a-mod:a;
}


void print(priority_queue<pii,vector<pii>,less<pii>> pq){
	vector<pii> tmp;
	while(!pq.empty()){
		cerr<<pq.top().fs<<','<<pq.top().sc<<' ';
		tmp.push_back(pq.top());
		pq.pop();
	}
	cerr<<endl;
	return;
}

struct DSU{
	int dsu[mxn],sz[mxn];
	priority_queue<pii,vector<pii>,less<pii>> pq[mxn];
	DSU(){}
	void init(int n){
		for(int i = 0;i<=n;i++)dsu[i] = i,sz[i] = 1;
		return;
	}
	int root(int k){
		return k == dsu[k]?k:dsu[k] = root(dsu[k]);
	}
	void onion(int a,int b){
		a = root(a),b = root(b);
		if(a == b)return;
		if(sz[a]<sz[b])swap(a,b);
		dsu[b] = a;
		sz[a] += sz[b];
		if(pq[a].size()<pq[b].size())pq[a].swap(pq[b]);
		while(!pq[b].empty()){
			pq[a].push(pq[b].top());
			pq[b].pop();
		}
		return;
	}
};

pii arr[mxn];
int N;
int C = 0;
int col[mxn];
DSU dsu;
int op[mxn];
set<pii> st;
bitset<mxn> active;

void update(int r){
	r = dsu.root(r);
	if(!dsu.pq[r].empty()&&st.find(dsu.pq[r].top()) != st.end())st.erase(dsu.pq[r].top());
	while(!dsu.pq[r].empty()&&!active[dsu.pq[r].top().sc])dsu.pq[r].pop();
	if(!dsu.pq[r].empty())st.insert(dsu.pq[r].top());
	return;
}

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N;
	dsu.init(N*2);
	for(int i = 1;i<=N;i++){
		cin>>arr[i].fs>>arr[i].sc;
		op[arr[i].fs] = i;
		op[arr[i].sc] = -i;
		dsu.pq[i*2].push(pii(arr[i].fs,i));
	}

	for(int i = 1;i<=N*2;i++){
		if(op[i]>0){
			active[op[i]] = true;
			update(op[i]*2);
			continue;
		}
		int pos = -op[i];
		active[pos] = false;
		update(dsu.root(pos*2));
		while(!st.empty()&&st.rbegin()->fs>arr[pos].fs){
			if(active[st.rbegin()->sc]){
				dsu.onion(pos*2-1,st.rbegin()->sc*2);
				dsu.onion(pos*2,st.rbegin()->sc*2-1);
			}
			st.erase(*st.rbegin());
		}
		update(dsu.root(pos*2-1));
		//cerr<<i<<":";for(auto &j:st)cerr<<j.fs<<','<<j.sc<<' ';cerr<<endl;
	}

	int ans = 0;
	for(int i = 1;i<=N;i++){
		if(dsu.root(i*2) == dsu.root(i*2-1)){
			cout<<0;
			return 0;
		}
		if(dsu.root(i*2) == i*2)ans++;
		if(dsu.root(i*2-1) == i*2-1)ans++;
	}
	cout<<pw(2,ans>>1);
}
# Verdict Execution time Memory Grader output
1 Correct 38 ms 72024 KB Output is correct
2 Correct 16 ms 72028 KB Output is correct
3 Correct 15 ms 72028 KB Output is correct
4 Correct 15 ms 72188 KB Output is correct
5 Correct 14 ms 72280 KB Output is correct
6 Correct 14 ms 72184 KB Output is correct
7 Correct 15 ms 72284 KB Output is correct
8 Correct 15 ms 72028 KB Output is correct
9 Correct 16 ms 72028 KB Output is correct
10 Correct 16 ms 72028 KB Output is correct
11 Correct 14 ms 72028 KB Output is correct
12 Correct 14 ms 72220 KB Output is correct
13 Correct 15 ms 72184 KB Output is correct
14 Correct 14 ms 72028 KB Output is correct
15 Correct 14 ms 72028 KB Output is correct
16 Correct 15 ms 72272 KB Output is correct
17 Correct 15 ms 72028 KB Output is correct
18 Correct 16 ms 72028 KB Output is correct
19 Correct 15 ms 72028 KB Output is correct
20 Correct 15 ms 72024 KB Output is correct
21 Correct 14 ms 72284 KB Output is correct
22 Correct 15 ms 72028 KB Output is correct
23 Correct 15 ms 72148 KB Output is correct
24 Correct 15 ms 72024 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 72024 KB Output is correct
2 Correct 16 ms 72028 KB Output is correct
3 Correct 15 ms 72028 KB Output is correct
4 Correct 15 ms 72188 KB Output is correct
5 Correct 14 ms 72280 KB Output is correct
6 Correct 14 ms 72184 KB Output is correct
7 Correct 15 ms 72284 KB Output is correct
8 Correct 15 ms 72028 KB Output is correct
9 Correct 16 ms 72028 KB Output is correct
10 Correct 16 ms 72028 KB Output is correct
11 Correct 14 ms 72028 KB Output is correct
12 Correct 14 ms 72220 KB Output is correct
13 Correct 15 ms 72184 KB Output is correct
14 Correct 14 ms 72028 KB Output is correct
15 Correct 14 ms 72028 KB Output is correct
16 Correct 15 ms 72272 KB Output is correct
17 Correct 15 ms 72028 KB Output is correct
18 Correct 16 ms 72028 KB Output is correct
19 Correct 15 ms 72028 KB Output is correct
20 Correct 15 ms 72024 KB Output is correct
21 Correct 14 ms 72284 KB Output is correct
22 Correct 15 ms 72028 KB Output is correct
23 Correct 15 ms 72148 KB Output is correct
24 Correct 15 ms 72024 KB Output is correct
25 Correct 15 ms 72276 KB Output is correct
26 Correct 15 ms 72284 KB Output is correct
27 Correct 15 ms 72284 KB Output is correct
28 Correct 16 ms 72284 KB Output is correct
29 Correct 15 ms 72392 KB Output is correct
30 Correct 15 ms 72280 KB Output is correct
31 Correct 15 ms 72288 KB Output is correct
32 Correct 16 ms 72204 KB Output is correct
33 Correct 15 ms 72284 KB Output is correct
34 Correct 15 ms 72200 KB Output is correct
35 Correct 16 ms 72284 KB Output is correct
36 Correct 15 ms 72400 KB Output is correct
37 Correct 16 ms 72280 KB Output is correct
38 Correct 15 ms 72284 KB Output is correct
39 Correct 15 ms 72284 KB Output is correct
40 Correct 15 ms 72148 KB Output is correct
41 Correct 15 ms 72280 KB Output is correct
42 Correct 16 ms 72284 KB Output is correct
43 Correct 15 ms 72280 KB Output is correct
44 Correct 17 ms 72284 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 72024 KB Output is correct
2 Correct 16 ms 72028 KB Output is correct
3 Correct 15 ms 72028 KB Output is correct
4 Correct 15 ms 72188 KB Output is correct
5 Correct 14 ms 72280 KB Output is correct
6 Correct 14 ms 72184 KB Output is correct
7 Correct 15 ms 72284 KB Output is correct
8 Correct 15 ms 72028 KB Output is correct
9 Correct 16 ms 72028 KB Output is correct
10 Correct 16 ms 72028 KB Output is correct
11 Correct 14 ms 72028 KB Output is correct
12 Correct 14 ms 72220 KB Output is correct
13 Correct 15 ms 72184 KB Output is correct
14 Correct 14 ms 72028 KB Output is correct
15 Correct 14 ms 72028 KB Output is correct
16 Correct 15 ms 72272 KB Output is correct
17 Correct 15 ms 72028 KB Output is correct
18 Correct 16 ms 72028 KB Output is correct
19 Correct 15 ms 72028 KB Output is correct
20 Correct 15 ms 72024 KB Output is correct
21 Correct 14 ms 72284 KB Output is correct
22 Correct 15 ms 72028 KB Output is correct
23 Correct 15 ms 72148 KB Output is correct
24 Correct 15 ms 72024 KB Output is correct
25 Correct 15 ms 72276 KB Output is correct
26 Correct 15 ms 72284 KB Output is correct
27 Correct 15 ms 72284 KB Output is correct
28 Correct 16 ms 72284 KB Output is correct
29 Correct 15 ms 72392 KB Output is correct
30 Correct 15 ms 72280 KB Output is correct
31 Correct 15 ms 72288 KB Output is correct
32 Correct 16 ms 72204 KB Output is correct
33 Correct 15 ms 72284 KB Output is correct
34 Correct 15 ms 72200 KB Output is correct
35 Correct 16 ms 72284 KB Output is correct
36 Correct 15 ms 72400 KB Output is correct
37 Correct 16 ms 72280 KB Output is correct
38 Correct 15 ms 72284 KB Output is correct
39 Correct 15 ms 72284 KB Output is correct
40 Correct 15 ms 72148 KB Output is correct
41 Correct 15 ms 72280 KB Output is correct
42 Correct 16 ms 72284 KB Output is correct
43 Correct 15 ms 72280 KB Output is correct
44 Correct 17 ms 72284 KB Output is correct
45 Correct 99 ms 84812 KB Output is correct
46 Correct 99 ms 84872 KB Output is correct
47 Correct 126 ms 85232 KB Output is correct
48 Correct 105 ms 84792 KB Output is correct
49 Correct 85 ms 85072 KB Output is correct
50 Correct 91 ms 84872 KB Output is correct
51 Correct 83 ms 85076 KB Output is correct
52 Correct 62 ms 82768 KB Output is correct
53 Correct 74 ms 87380 KB Output is correct
54 Correct 113 ms 87404 KB Output is correct
55 Correct 85 ms 86200 KB Output is correct
56 Correct 90 ms 85940 KB Output is correct
57 Correct 54 ms 82684 KB Output is correct
58 Correct 44 ms 82828 KB Output is correct
59 Correct 79 ms 84380 KB Output is correct
60 Correct 70 ms 84464 KB Output is correct
61 Correct 79 ms 84048 KB Output is correct
62 Correct 72 ms 84240 KB Output is correct
63 Correct 73 ms 83792 KB Output is correct
64 Correct 82 ms 84560 KB Output is correct
65 Correct 86 ms 85840 KB Output is correct
66 Correct 81 ms 85332 KB Output is correct
67 Correct 86 ms 85712 KB Output is correct
68 Correct 96 ms 85708 KB Output is correct
69 Correct 83 ms 85452 KB Output is correct
70 Correct 84 ms 85460 KB Output is correct
71 Correct 86 ms 87380 KB Output is correct
72 Correct 99 ms 87584 KB Output is correct
73 Correct 86 ms 87400 KB Output is correct
74 Correct 89 ms 87508 KB Output is correct
75 Correct 67 ms 82820 KB Output is correct
76 Correct 65 ms 82820 KB Output is correct
77 Correct 70 ms 82900 KB Output is correct
78 Correct 95 ms 84800 KB Output is correct
79 Correct 88 ms 84820 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 72024 KB Output is correct
2 Correct 16 ms 72028 KB Output is correct
3 Correct 15 ms 72028 KB Output is correct
4 Correct 15 ms 72188 KB Output is correct
5 Correct 14 ms 72280 KB Output is correct
6 Correct 14 ms 72184 KB Output is correct
7 Correct 15 ms 72284 KB Output is correct
8 Correct 15 ms 72028 KB Output is correct
9 Correct 16 ms 72028 KB Output is correct
10 Correct 16 ms 72028 KB Output is correct
11 Correct 14 ms 72028 KB Output is correct
12 Correct 14 ms 72220 KB Output is correct
13 Correct 15 ms 72184 KB Output is correct
14 Correct 14 ms 72028 KB Output is correct
15 Correct 14 ms 72028 KB Output is correct
16 Correct 15 ms 72272 KB Output is correct
17 Correct 15 ms 72028 KB Output is correct
18 Correct 16 ms 72028 KB Output is correct
19 Correct 15 ms 72028 KB Output is correct
20 Correct 15 ms 72024 KB Output is correct
21 Correct 14 ms 72284 KB Output is correct
22 Correct 15 ms 72028 KB Output is correct
23 Correct 15 ms 72148 KB Output is correct
24 Correct 15 ms 72024 KB Output is correct
25 Correct 15 ms 72276 KB Output is correct
26 Correct 15 ms 72284 KB Output is correct
27 Correct 15 ms 72284 KB Output is correct
28 Correct 16 ms 72284 KB Output is correct
29 Correct 15 ms 72392 KB Output is correct
30 Correct 15 ms 72280 KB Output is correct
31 Correct 15 ms 72288 KB Output is correct
32 Correct 16 ms 72204 KB Output is correct
33 Correct 15 ms 72284 KB Output is correct
34 Correct 15 ms 72200 KB Output is correct
35 Correct 16 ms 72284 KB Output is correct
36 Correct 15 ms 72400 KB Output is correct
37 Correct 16 ms 72280 KB Output is correct
38 Correct 15 ms 72284 KB Output is correct
39 Correct 15 ms 72284 KB Output is correct
40 Correct 15 ms 72148 KB Output is correct
41 Correct 15 ms 72280 KB Output is correct
42 Correct 16 ms 72284 KB Output is correct
43 Correct 15 ms 72280 KB Output is correct
44 Correct 17 ms 72284 KB Output is correct
45 Correct 99 ms 84812 KB Output is correct
46 Correct 99 ms 84872 KB Output is correct
47 Correct 126 ms 85232 KB Output is correct
48 Correct 105 ms 84792 KB Output is correct
49 Correct 85 ms 85072 KB Output is correct
50 Correct 91 ms 84872 KB Output is correct
51 Correct 83 ms 85076 KB Output is correct
52 Correct 62 ms 82768 KB Output is correct
53 Correct 74 ms 87380 KB Output is correct
54 Correct 113 ms 87404 KB Output is correct
55 Correct 85 ms 86200 KB Output is correct
56 Correct 90 ms 85940 KB Output is correct
57 Correct 54 ms 82684 KB Output is correct
58 Correct 44 ms 82828 KB Output is correct
59 Correct 79 ms 84380 KB Output is correct
60 Correct 70 ms 84464 KB Output is correct
61 Correct 79 ms 84048 KB Output is correct
62 Correct 72 ms 84240 KB Output is correct
63 Correct 73 ms 83792 KB Output is correct
64 Correct 82 ms 84560 KB Output is correct
65 Correct 86 ms 85840 KB Output is correct
66 Correct 81 ms 85332 KB Output is correct
67 Correct 86 ms 85712 KB Output is correct
68 Correct 96 ms 85708 KB Output is correct
69 Correct 83 ms 85452 KB Output is correct
70 Correct 84 ms 85460 KB Output is correct
71 Correct 86 ms 87380 KB Output is correct
72 Correct 99 ms 87584 KB Output is correct
73 Correct 86 ms 87400 KB Output is correct
74 Correct 89 ms 87508 KB Output is correct
75 Correct 67 ms 82820 KB Output is correct
76 Correct 65 ms 82820 KB Output is correct
77 Correct 70 ms 82900 KB Output is correct
78 Correct 95 ms 84800 KB Output is correct
79 Correct 88 ms 84820 KB Output is correct
80 Correct 1353 ms 164844 KB Output is correct
81 Correct 1383 ms 164844 KB Output is correct
82 Correct 1353 ms 164948 KB Output is correct
83 Correct 1364 ms 164948 KB Output is correct
84 Correct 1343 ms 164728 KB Output is correct
85 Correct 1352 ms 165952 KB Output is correct
86 Correct 1379 ms 165628 KB Output is correct
87 Correct 632 ms 142676 KB Output is correct
88 Correct 1311 ms 189848 KB Output is correct
89 Correct 1552 ms 189856 KB Output is correct
90 Correct 1416 ms 172516 KB Output is correct
91 Correct 1609 ms 172264 KB Output is correct
92 Correct 793 ms 142896 KB Output is correct
93 Correct 633 ms 142884 KB Output is correct
94 Correct 1134 ms 158280 KB Output is correct
95 Correct 1203 ms 157432 KB Output is correct
96 Correct 1313 ms 158028 KB Output is correct
97 Correct 1148 ms 160336 KB Output is correct
98 Correct 1222 ms 156952 KB Output is correct
99 Correct 1319 ms 159876 KB Output is correct
100 Correct 1322 ms 166372 KB Output is correct
101 Correct 1335 ms 166480 KB Output is correct
102 Correct 1400 ms 171644 KB Output is correct
103 Correct 1422 ms 171160 KB Output is correct
104 Correct 1337 ms 168764 KB Output is correct
105 Correct 1316 ms 166884 KB Output is correct
106 Correct 1549 ms 189868 KB Output is correct
107 Correct 1609 ms 189980 KB Output is correct
108 Correct 1684 ms 189864 KB Output is correct
109 Correct 1588 ms 189852 KB Output is correct
110 Correct 996 ms 142868 KB Output is correct
111 Correct 874 ms 142892 KB Output is correct
112 Correct 1000 ms 142660 KB Output is correct
113 Correct 1319 ms 164732 KB Output is correct
114 Correct 1333 ms 164696 KB Output is correct