2963: 【例75.1】 坐标统计

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:1 解决:1

题目描述

输入$n$个点在平面上的坐标(横纵坐标都是整数),对于每个点可以控制所有位于它左下方的点(即横坐标$x$和纵坐标$y$都比它小),它可以控制的点的数目称为“战斗力”。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。

输入

输入第一行包含一个正整数$n$ ($1≤n≤100$);接下来的$n$行,每行描述一个点的坐标,第$i+1$行包含两个正整数$x$和$y$ ($1≤x,y≤1000$),表示编号为$i$的点的横坐标为$x$,纵坐标为$y$。

输出

输出共有$n+1$行,第$1$行到第$n$行,每行包含一个整数,第$i$行的整数表示编号为$i$的点的战斗力,第$n+1$行表示战斗力最高的点的编号。

样例输入 复制

6
4 2
6 6
4 8
15 6
11 9
8 14

样例输出 复制

0
1
0
1
3
3
6

提示

#include<iostream>

using namespace std;
struct node {
    int x, y;
}
a[10005];
int sum[10005], maxn, ans;
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i].x >> a[i].y;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++)
            if (a[i].x > a[j].x && a[i].y > a[j].y) sum[i]++;
        if (sum[i] >= maxn)
            ans = i, maxn = sum[i];
    }
    for (int i = 1; i <= n; i++)
        cout << sum[i] << endl;
    cout << ans << endl;
    return 0;
}