時間限制:1秒
空間限制:32768K
P爲給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其爲“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內)
如下圖:實心點爲滿足條件的點的集合。請實現代碼找到集合 P 中的所有 ”最大“ 點的集合並輸出。
輸入描述:
第一行輸入點集的個數 N, 接下來 N 行,每行兩個數字代表點的 X 軸和 Y 軸。
對於 50%的數據, 1 <= N <= 10000;
對於 100%的數據, 1 <= N <= 500000;
輸出描述:
輸出“最大的” 點集合, 按照 X 軸從小到大的方式輸出,每行兩個數字分別代表點的 X 軸和 Y軸。
輸入例子1:
5
1 2
5 3
4 6
7 5
9 0
輸出例子1:
4 6
7 5
9 0
現根據y值進行排序,然後比較比較當前點的x值與改點上面的所有點的最大x值,如果小於說明改點一定是最大點。
但是由於時間限制,只能過80%
#include<algorithm>
using namespace std;
struct loc
{
int x;
int y;
};
int cmp(const loc& a, const loc& b)
{
return a.y>b.y;
}
int main()
{
int n;
cin>>n;
loc* a = new loc[n];
for(int i=0;i<n;i++)
{
int xx,yy;
cin>>xx>>yy;
a[i].x=xx;
a[i].y=yy;
}
sort(a,a+n,cmp);
int maxx=-1;
for(int i=0;i<n;i++)
{
if(a[i].y==a[i+1].y)
{
continue;
}
if(a[i].x> maxx)
{
cout<<a[i].x<<" "<<a[i].y<<endl;
maxx=a[i].x;
}
}
}