/**
题意:给定n个人的能力值,如果该人能力值大于其它人且这个人不和他们吵架,那么我们就可以说这个这个人可以做其它人的导师;'
求解每个人可以作为多少学生的导师;
题解: 看题是真的是看了半天 后来也是在网吧没有ac 辜负了家辉 喵喵喵;
后来也是听了家辉的思路 敲了敲 然后就过了.....Orz;
首先分析能力值 一个二分就出来了 那么我们如何处理吵架这个事情呢
举个例子吧: x y :1 3 表示 1号和3号吵架 那么我们可以这样分析
如果1号的能力值大于3号(a[1]>a[3]) 那么我们在查找1号的时候需要减去1(三号不满足条件) ans[1]--;
如果1号的能力值小于3号(a[1]<a[3]) 那么我们在查找3号的时候需要减去1(一号不满足条件) ans[3]--;
等于的情况不予考虑 二分为lower_bound();
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+7;
int a[maxn],b[maxn],ans[maxn],l,r;
int main (){
int n,m;scanf("%d %d",&n,&m);
memset(ans,0,(n+3)*sizeof(int));
for(int i=0;i<n;i++) scanf("%d",&a[i]),b[i]=a[i];
for(int i=0;i<m;i++){
scanf("%d %d",&l,&r);l--,r--;
if(a[l]>a[r]) ans[l]--;
else if(a[l]<a[r]) ans[r]--;
}
sort(b,b+n);
for(int i=0;i<n;i++){
int res=lower_bound(b,b+n,a[i])-b;
printf("%d\n",ans[i]+res);
}
return 0;
}
Codeforces Round #481 (Div. 3) F. Mentors 思维
最新推荐文章于 2022-11-19 18:52:08 发布