P es un entero de conjunto de puntos plano dado de dos dimensiones. En la definición de un punto P x, si x no cumple ninguno del punto P en la zona superior derecha de la x (coordenadas horizontal y vertical son mayores que x), que se llama "máximo". Encontrar una colección de todos los puntos "más grandes". (Abscisa y la ordenada todos los puntos no se repiten, en el eje de coordenadas rango [0,1e9) Endo)
La figura siguiente: punto sólido se establece para satisfacer las condiciones del punto. Por favor, encontrar el código que implementa todas las del conjunto P conjunto "máximo" de puntos y de salida.
Introduzca una descripción:
Un primer número de línea de entrada puntos de ajuste N, las siguientes N filas, cada número de fila representa dos puntos ejes X e Y. Para 50% de los datos, 1 <= N <= 10.000 ;
a 100% de los datos, 1 <= N <= 500.000 ;
Descripción Salida:
Output "grande" punto de ajuste, la forma de pequeño a grande de salida en el eje X, cada fila de dígitos representa dos puntos X e Y ejes.
输入例子1:
> 5 1 2 5 3 4 6 7 5 9 0
输出例子1:
> 4 6 7 5 9 0
Solución: en el y ordenadas en orden descendente, y luego pequeños a grandes x selectos, el valor de x es sin duda una gran relación del primero (en orden descendente y) más grande que el valor anterior de y, de manera que el punto "más grande" `
#include
#include
#include
#include
using namespace std;
nodo struct
{
int x;
y int;
};
cmp bool (n1 nodo, el nodo n2)
{
retorno n1.y> n2.y;
}
Nodo cabeceo [1000000];
int main ()
{
int n;
while (! scanf ( "% d", y n) = EOF)
{
for (int i = 0; i <n; i ++)
{
scanf ( "% d% d", y cabeceo [i] .x, y cabeceo [i] .y);
}
Sort (guiño, guiño + n, cmp);
int min = -1;
for (int i = 0; i <n; i ++)
{
si (NOD [i] .x> min)
{
min = cabeceo [i] .x;
printf ( "% d% d \ n", NOD [i] .x, NOD [i] .y);
return 0;
}
{Público Clase principal
// matriz de dos dimensiones, utilizando las siguientes dimensiones cuando el código quiere entrada un número arbitrario de caracteres separados por espacios cada
public static void main (String [] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//获取点数
int a[][]=new int[n][1];
//跳过这行换行符
sc.nextLine();
for(int i=0;i<n;i++){
String str = sc.nextLine();
Scanner sc1 = new Scanner(str);
int j=0;
while(sc1.hasNextInt()){
a[i][j++]=sc1.nextInt();
}
}
//已经获得数组,行值为x,列值为y
//对数组进行排序
//比较,如果该数x不小于前一个的x,则比较y,y较大为最大的
for( int i=0;i<n-1;i++){
if(a[i][0]<a[i+1][0]){
if(a[i][1]<=a[i+1][1])
System.out.println(a[i][1]);
}else{
if(a[i][0]=a[i+1][0]){
if()
while(a[i][j]!=0)
System.out.print(a[i][j++]+" ");
System.out.println();
}
}
}