.
A programmer a
are not in a quarrel.
You are given the skills of each programmers and a list of k
pairs of the programmers, which are in a quarrel (pairs are unordered). For each programmer i, find the number of programmers, for which the programmer ican be a mentor.
The first line contains two integers n
— total number of programmers and number of pairs of programmers which are in a quarrel.
The second line contains a sequence of integers r1,r2,…,rn
(1≤ri≤109), where ri equals to the skill of the i-th programmer.
Each of the following k
lines contains two distinct integers x, y (1≤x,y≤n, x≠y) — pair of programmers in a quarrel. The pairs are unordered, it means that if x is in a quarrel with y then y is in a quarrel with x. Guaranteed, that for each pair (x,y) there are no other pairs (x,y) and (y,x)in the input.
Print n
-th programmer can be a mentor. Programmers are numbered in the same order that their skills are given in the input.
4 2 10 4 10 15 1 2 4 3
0 0 1 2
10 4 5 4 1 5 4 3 7 1 2 5 4 6 2 1 10 8 3 5
5 4 0 5 3 3 9 0 2 5
In the first example, the first programmer can not be mentor of any other (because only the second programmer has a skill, lower than first programmer skill, but they are in a quarrel). The second programmer can not be mentor of any other programmer, because his skill is minimal among others. The third programmer can be a mentor of the second programmer. The fourth programmer can be a mentor of the first and of the second programmers. He can not be a mentor of the third programmer, because they are in a quarrel.
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=2e5+10; int ans[maxn]; struct node{ int id,val; node(){} node(int _val){ val=_val; } bool operator<(const node& b)const{ return val<b.val; } }p[maxn]; /* 暴力统计一下数量就好了 */ int main() { int n,k; scanf("%d %d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&p[i].val); p[i].id=i; } for(int i=1;i<=k;i++){ int u,v; scanf("%d %d",&u,&v); if(p[u].val>p[v].val) ans[u]--; if(p[v].val>p[u].val) ans[v]--; } sort(p+1,p+n+1); for(int i=1;i<=n;i++){ int pos=lower_bound(p+1,p+n+1,node(p[i].val))-p; ans[p[i].id]+=pos-1; } for(int i=1;i<=n;i++){ if(i==1)printf("%d",ans[i]); else printf(" %d",ans[i]); } printf("\n"); return 0; }