제출 #1227659

#제출 시각아이디문제언어결과실행 시간메모리
1227659minhpkPort Facility (JOI17_port_facility)C++20
0 / 100
11 ms23872 KiB
#include <bits/stdc++.h> #define int long long using namespace std; pair<int,int> z[1000005]; vector <pair<int,int>> v; set <int> s; vector <int> v1[1000005]; int a; struct BIT{ int bit[2000005]={0}; void update(int i,int val){ i++; while(i<=2*a){ bit[i]+=val; i+=i&-i; } } int query(int i){ i++; int res=0; while (i>0){ res+=bit[i]; i-=i&-i; } return res; } }; BIT f,f1; int res=1; bool vis[1000005]; void dfs(int i){ // cout << i << " "; vis[i]=true; for (auto p:v1[i]){ dfs(p); } } int mod=1e9+7; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a; for (int i=1;i<=a;i++){ cin >> z[i].first >> z[i].second; } sort(z+1,z+1+a); for (int i=1;i<=a;i++){ v.push_back({z[i].first,i}); v.push_back({z[i].second,-i}); } sort(v.begin(),v.end()); for (auto [x,y]:v){ // cout << x << " " << y << "\n"; if (y>0){ int val=f.query(z[y].second); if (val>1){ cout << 0 << "\n"; return 0; } if (val==1){ int par=f1.query(z[y].second); // if (y==3){ // cout << par << "\n"; // } v1[par].push_back(y); } f.update(z[y].second,1); f1.update(z[y].second,y); }else{ f.update(z[-y].second,-1); f1.update(z[-y].second,y); } } for (int i=1;i<=a;i++){ if (!vis[i]){ // cout << "\n"; res=res*2%mod; dfs(i); // cout << "\n"; } } cout << res << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...