1.先对所有点集按y的降序排列,存放到vector变量中
x1, x2, ... , xn
y1>y2>...>yn
2.判断(xi,yi)(其中i=1,...,n)是否满足题目要求的“最大的”点
满足要求为:xi>xj,j=1,...,i-1;
因为点集已经按照y的降序进行排列,判断(xi,yi)时,只有y值比yi大的点(即该点在(xi,yi)的左上方或右上方)可能导致(xi,yi)不是“最大的点”,接着排除右上方的可能性,即满足上述要求
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int> point1, pair<int, int> point2)
{
if(point1.second > point2.second)
return true;
else
return false;
}
int main(int argc, char** argv)
{
int n;
cin>>n;
vector<pair<int,int> > points;
for(int i=0; i<n; i++)
{
int x,y;
cin>>x>>y;
points.push_back(make_pair(x,y));
}
sort(points.begin(), points.end(), cmp);
int max_x = 0;
vector<pair<int, int> >::iterator it;
for(it=points.begin(); it!=points.end(); it++)
{
if(it->first > max_x)
{
cout<<it->first<<" "<<it->second<<endl;
max_x = it->first;
}
}
return 0;
}