链接:https://ac.nowcoder.com/acm/contest/949/F
来源:牛客网
小石的妹子
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
小石有 n 个妹子,每个妹子都有一个细心程度 aia_iai 和一个热心程度 bib_ibi,
小石想给她们一个重要程度 tit_iti(重要程度为 1 表示最重要,重要程度越小表示越重要)。
如果一个妹子 i 的细心程度和热心程度都比妹子 j 大,那么妹子 i 的重要程度要大于妹子 j 的重要程度,即妹子 i 比妹子 j 重要。
流程如下:
每次从所有没有重要程度的妹子中,找到若干妹子。对于这些妹子的任意一个,需要保证没有其他妹子比她更重要。然后把她们的重要程度标为 1 。下一次再从剩下没有重要程度的妹子中找到若干妹子,依然符合上述条件,然后把她们的重要程度标为 2,……,重复直到所有妹子都有自己的重要程度。
由于妹子太多,小石忙不过来,请你帮帮他。
输入描述:
第一行输入一个正整数 n,表示妹子的数量。 接下来 n 行,每行两个正整数 ai,bia_i,b_iai,bi,描述每个妹子的细心程度和热心程度。 保证所有的 aia_iai 两两不等,所有的 bib_ibi 两两不等。
输出描述:
共 n 行,第 i 行输出一个正整数 tit_iti 表示第 i 个妹子的重要程度。
示例1
输入
复制
5 1 4 2 2 3 3 4 1 5 5
输出
复制
2 3 2 2 1
说明
第一轮取第 5 个妹子(5 5),因为没有其他妹子比她重要,标记为 1;第二轮取编号为 1,3,4 的妹子,因为对于其中的任意一个妹子,都没有其他妹子比她们重要,标记为 2;第三轮把编号为 2 的妹子标记为 3 。
备注:
1≤n≤105,1≤ai,bi≤1091 \leq n \leq 10^5,1 \leq a_i,b_i \leq 10^91≤n≤105,1≤ai,bi≤109
#include<bits/stdc++.h>
using namespace std;const int M = 100005;int rnk[M];
struct node
{int id, x;bool operator < (const node &t) const{return x > t.x;}
}a[M], b[M];int main()
{int n, k = 0;cin >> n;for( int i = 0; i < n; i++ ){cin >> a[i].x >> b[i].x;a[i].id = i;}sort( a, a+n ); for( int i = 0; i < n; i++ )if( rnk[a[i].id] == 0 ){rnk[a[i].id] = ++k;int now = b[a[i].id].x;for( int j = i+1; j < n; j++ )if( rnk[a[j].id] == 0 && b[a[j].id].x > now ){rnk[a[j].id] = k;now = b[a[j].id].x;}} for( int i = 0; i < n; i++ )cout << rnk[i] << endl;return 0;
}