提交时间:2026-04-11 15:33:35

运行 ID: 41176

#include<bits/stdc++.h> #define int long long #define y0 jp8akioi #define y1 jbhakioi #define yn baka24akioi using namespace std; inline void read(int &x){ x=0;char c=getchar();bool neg=0; for(;!isdigit(c);c=getchar())neg=(c=='-'); for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48); if(neg)x=-x; } inline void read(string &x){ x="";char c=getchar(); for(;isspace(c);c=getchar()); for(;!isspace(c)&&c!=EOF;c=getchar())x+=c; } inline void read(char &x){ x=getchar(); while(isspace(x))x=getchar(); } template<typename... T> inline void read(T&... x){ (read(x),...); } int n,x[1000005],y[1000005]; unordered_map<int,vector<pair<int,int>>>vx; unordered_map<int,set<tuple<int,int,int>>>vy; unordered_map<int,pair<int,int>>id; void slv(){ read(n);for(int i=1;i<=n;i++)read(x[i],y[i]),swap(x[i],y[i]); queue<int>q; for(int i=1;i<=n;i++)vx[x[i]].push_back({y[i],i}); bitset<1000005>ans; for(auto&[x,y]:vx){ sort(y.begin(),y.end()); vy[y[0].first].insert({x,y[0].second,0}); if(y.size()>1) vy[y.back().first].insert({x,y.back().second,1}); ans[y[0].second]=1; ans[y.back().second]=1; id[x]={0,y.size()-1}; } for(auto[x,y]:vy)if(y.size()>2)q.push(x); auto push_up=[&](int x,int y){ auto vx=::vx[x][id[x].second]; ans[vx.second]=0; vy[y].erase({x,vx.second,1}); if(::id[x].second==::id[x].first){ vy[y].erase({x,vx.second,0}); return; } id[x].second--; vx=::vx[x][id[x].second]; ans[vx.second]=1; if(::id[x].second!=::id[x].first) vy[vx.first].insert({x,vx.second,1}); q.push(vx.first); }; auto push_down=[&](int x,int y){ auto vx=::vx[x][id[x].first]; ans[vx.second]=0; vy[y].erase({x,vx.second,0}); if(::id[x].second==::id[x].first){ vy[y].erase({x,vx.second,1}); return; } id[x].first++; vx=::vx[x][id[x].first]; ans[vx.second]=1; if(::id[x].second!=::id[x].first) vy[vx.first].insert({x,vx.second,0}); q.push(vx.first); }; while(q.size()){ while(vy[q.front()].size()>2){ auto it=next(vy[q.front()].begin()); auto[a,b,c]=*it; if(c)push_up(a,q.front()); else push_down(a,q.front()); } q.pop(); } for(int i=1;i<=n;i++)cout<<ans[i]; } signed main(){ // int t;read(t);while(t--) slv(); return 0; }