WA on #2 #8 #10
//2023/4/1
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
struct point{
int x=0,y=0;
}a[100001];
bool cmp(point x,point y)
{
if(x.x==y.x)
{
return x.y<y.y;
}
return x.x<y.x;
}
int main()
{
point xmax;
point ymax;
point ans[50000];
int n,x1,y1;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>a[i].x>>a[i].y;
if(a[i].x>=xmax.x)
{
if(a[i].x==xmax.x)
{
if(a[i].y>xmax.y)
{
xmax.x=a[i].x;
xmax.y=a[i].y;
x1=i;
}
}
else
{
xmax.x=a[i].x;
xmax.y=a[i].y;
x1=i;
}
}
if(a[i].y>=ymax.y)
{
if(a[i].y==ymax.y)
{
if(a[i].x>ymax.x)
{
ymax.x=a[i].x;
ymax.y=a[i].y;
y1=i;
}
}
else
{
ymax.x=a[i].x;
ymax.y=a[i].y;
y1=i;
}
}
}
sort(a+1,a+1+n,cmp);
int k=0;
for (int i=1;i<=n;i++)
{
if(a[i].x==a[i+1].x)
{
continue;
}
if(a[i].x>ymax.x&&a[i].y>xmax.y)
{
ans[k].x=a[i].x;
ans[k].y=a[i].y;
for (int j=0;j<k;j++)
{
if(ans[j].x<ans[k].x&&ans[j].y<ans[k].y)
{
ans[j].x=-1;
ans[j].y=-1;
}
}
k++;
}
}
ans[k].x=xmax.x;
ans[k].y=xmax.y;
ans[k+1].x=ymax.x;
ans[k+1].y=ymax.y;
sort(ans,ans+k+2,cmp);
for (int i=0;i<=k;i++)
{
if(ans[i].x==-1&&ans[i].y==-1)
{
continue;
}
if(ans[i].x==ans[i+1].x&&ans[i].y==ans[i+1].y)
{
continue;
}
cout<<"("<<ans[i].x<<","<<ans[i].y<<")"<<",";
}
cout<<"("<<ans[k+1].x<<","<<ans[k+1].y<<")";
return 0;
}