Submission #1226427

#TimeUsernameProblemLanguageResultExecution timeMemory
1226427PenguinsAreCutePort Facility (JOI17_port_facility)C++17
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; using ii = pair<int,int>; int main() { int n; cin >> n; vector<int> adj[n]; pair<int,int> box[n]; int vis[n]; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) cin >> box[i].first >> box[i].second; sort(box,box+n); set<ii> connected; set<int> rgt; for(int i=0;i<n;i++) { auto [a, b] = box[i]; auto itc = connected.lower_bound(ii(b,0)); if(itc != connected.begin()) { auto [x, y] = (*--itc); auto itc2 = connected.lower_bound(ii(b+1,0)); if(itc2 == connected.end() || itc2->first > b+1) connected.insert({b+1,y}); } connected.insert({b,i}); auto itr = rgt.lower_bound(a); int cnt = 0; while(1) { if(itr == rgt.end() || (*itr) >= b) break; itc = --connected.lower_bound(ii(*itr + 1, 0)); adj[i].push_back(itc->second); adj[itc->second].push_back(i); if(exchange(cnt,1)) connected.erase(itc++); else itc++; if(itc == connected.end()) break; itr = rgt.lower_bound(itc->first); } rgt.insert(b); } int ans = 1; for(int i=0;i<n;i++) if(!vis[i]) { queue<int> q; q.push(i); vis[i] = 2; ans = (2 * ans) % (1'000'000'007); while(q.size()) { int x = q.front(); q.pop(); for(auto y: adj[x]) if(!vis[y]) { vis[y] = 1 ^ vis[x]; q.push(y); } else if(vis[y] == vis[x]) ans = 0; } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...