Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
41185 22fhq 【BJ】T3 C++ 编译错误 0 0 MS 0 KB 2501 2026-04-11 15:39:14

Tests(0/0):


#include<bits/stdc++.h> #define int unsigned #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; queue<int>q; bitset<1000005>ans; inline 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); }; inline 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); }; void slv(){ read(n);for(int i=1;i<=n;i++)read(x[i],y[i]); for(int i=1;i<=n;i++)vx[x[i]].push_back({y[i],i}); 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); 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++)putchar(ans[i]^48); } signed main(){ // int t;read(t);while(t--) slv(); return 0; }


测评信息: