제출 #1322666

#제출 시각아이디문제언어결과실행 시간메모리
1322666PieArmyPort Facility (JOI17_port_facility)C++20
100 / 100
3268 ms538520 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second #define endl '\n' using namespace std; #define mid ((left+right)>>1) int n; pair<int,int>ara[1000023]; vector<int>komsu[1000023],v[8000023]; int vis[1000023]; int l,r,val; void up(int node=1,int left=1,int right=-1){ if(right==-1)right=2*n; v[node].pb(r); if(left==right)return; if(l>mid)up(node*2+1,mid+1,right); else up(node*2,left,mid); } void update(int tar,int val){ l=tar;r=val; up(); } void qu(int node=1,int left=1,int right=-1){ if(right==-1)right=2*n; if(left>r||right<l)return; if(left>=l&&right<=r){ while(v[node].size()>1){ komsu[val].pb(v[node].back()); komsu[v[node].back()].pb(val); v[node].pop_back(); } if(v[node].size()){ komsu[val].pb(v[node][0]); komsu[v[node][0]].pb(val); } return; } qu(node*2,left,mid); qu(node*2+1,mid+1,right); } void query(int left,int right,int x){ l=left;r=right; val=x; qu(); } signed main(){ ios_base::sync_with_stdio(23^23);cin.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>ara[i].fr>>ara[i].sc; } sort(ara+1,ara+n+1); for(int i=1;i<=n;i++){ query(ara[i].fr,ara[i].sc,i); update(ara[i].sc,i); } int ans=1; for(int i=1;i<=n;i++){ if(vis[i])continue; ans*=2; if(ans>=1e9+7)ans-=1e9+7; queue<int>q; q.push(i); vis[i]=1; while(q.size()){ int pos=q.front(); q.pop(); for(int x:komsu[pos]){ if(vis[x]){ if(vis[x]==vis[pos])ans=0; continue; } vis[x]=(vis[pos]^3); q.push(x); } } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...