【题目描述】
现在有n个人,每个人都有一个智力值和能力值。对于某一个人A来说,如果其它n-1个人中,没有人的智力值和能力值都比A高,则我们称A为“牛人”。反过来说,只要有一个人的智力值和能力值都比A高,则A就不是“牛人”了。 请统计共有多少个“牛人”。
【输入】
第一行只有一个整数n。 第二行,有n个以空格分隔的正整数,第i个正整数表示第i个人的智力值。 第三行,有n个以空格分隔的正整数,第i个正整数表示第i个人的能力值。
【输出】
输出仅有一行,该行只有一个整数,表示求得的“牛人”数。
【样例输入】
5 25 40 30 20 5 20 10 25 38 5
【样例输出】
3
【样例说明】
第1人不是牛人,因为第3人的智力值和能力值都比第1人高;
第2人是牛人,因为其它4人的智力值都不如第2人;
第3人是牛人,因为第1、4、5三人的智力值都不如第3人,第2人的能力值不如第3人;
第4人是牛人,因为其它四人的能力值都不如第4人;
第5人不是牛人,因为其它四人的智力值和能力值都比第5人高;
【数据说明】
70%的数据,1≤n≤1000。
100%的数据,1≤n≤100000,所有人的智力值和工作能力值均不超过5000000000。
答案_
#include<bits/stdc++.h>
using namespace std;
struct cow{
long long itl,abl;
}a[100010];
int n,ans;
long long maxn;
bool cmp(cow x,cow y){
if(x.itl==y.itl)return x.abl<y.abl;
else return x.itl>y.itl;
}
int main(void)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%lld",&a[i].itl);
for(int i=1;i<=n;++i)
scanf("%lld",&a[i].abl);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i){
if(a[i].abl>=maxn){
maxn=a[i].abl;
++ans;
}
}
printf("%d",ans);
return 0;
}