75ptsWA求助
查看原帖
75ptsWA求助
792049
vegetable_chili楼主2024/1/23 14:12
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define N 1000010
int n,maxn,minn,mmaxn,mminn;
bool f[N],vis[N];
struct node{int x,y,id;}p[N];
bool cmpx(node a,node b){return a.x<b.x;}
bool cmpy(node a,node b){return a.y<b.y;}
void update(int x){
	maxn=max(maxn,x);
	minn=min(minn,x);
	return;
}
void update2(int x){
	mmaxn=max(mmaxn,x);
	mminn=min(mminn,x);
	return;
}
bool check(int x){
	return (mmaxn<x||mminn>x);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i].x>>p[i].y;
		p[i].id=i;
	}
	sort(p+1,p+n+1,cmpy);
	maxn=-1e18,minn=1e18;
	mmaxn=-1e18,mminn=1e18;
	for(int i=1;i<=n;i++){
		int l=i-1;
		while(l>0&&p[l].y==p[i-1].y&&p[l].y!=p[i].y){
			update(p[l].x);
			l--;
		}
		if(check(p[i].x)||(maxn<p[i].x&&minn>p[i].x))f[p[i].id]=true;
		update2(p[i].x);
	}
	maxn=-1e18,minn=1e18;
	mmaxn=-1e18,mminn=1e18;
	for(int i=n;i>0;i--){
		int l=i+1;
		while(l<=n&&p[l].y==p[i+1].y&&p[l].y!=p[i].y){
			update(p[l].x);
			l++;
		}
		if(check(p[i].x)||(maxn<p[i].x&&minn>p[i].x))f[p[i].id]=true;
		update2(p[i].x);
	}
	sort(p+1,p+n+1,cmpx);
	maxn=-1e18,minn=1e18;
	mmaxn=-1e18,mminn=1e18;
	for(int i=1;i<=n;i++){
		int l=i-1;
		while(l>0&&p[l].x==p[i-1].x&&p[l].x!=p[i].x){
			update(p[l].y);
			l--;
		}
		if(check(p[i].y)||(maxn<p[i].y&&minn>p[i].y))f[p[i].id]=true;
		update2(p[i].y);
	}
	maxn=-1e18,minn=1e18;
	mmaxn=-1e18,mminn=1e18;
	for(int i=n;i>0;i--){
		int l=i+1;
		while(l<=n&&p[l].x==p[i+1].x&&p[l].x!=p[i].x){
			update(p[l].y);
			l++;
		}
		if(check(p[i].y)||(maxn<p[i].y&&minn>p[i].y))f[p[i].id]=true;
		update2(p[i].y);
	}
	for(int i=1;i<=n;i++){
		if(f[i])cout<<'1';
		else cout<<'0';
	}
	return 0;
}
2024/1/23 14:12
加载中...