In BerSoft n
.
A programmer a
can be a mentor of a programmer b if and only if the skill of the programmer a is strictly greater than the skill of the programmer b (ra>rb) and programmers a and bare 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<bits/stdc++.h> using namespace std; #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) #define all(a) (a).begin(),(a).end() #define pll pair<ll,ll> #define vi vector<int> #define pb push_back ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main(){ freopen("in.txt","r",stdin); int n=rd(),m=rd(); vector<pll> a(n); vector<ll> init(n); rep(i,0,n-1){ a[i].first=rd(); a[i].second=i; init[i]=a[i].first; } sort(all(a)); vector<int> ans(n); vector<vi> g(n); while(m--){ int u=rd()-1,v=rd()-1; g[u].pb(v); g[v].pb(u); } int cnt=0; int curr=0; rep(i,0,n-1){ ++curr; int z=cnt; for(auto to:g[a[i].second]) if(init[a[i].second]>init[to]) z--; ans[a[i].second]=z; if(i+1<n&&a[i].first!=a[i+1].first){ cnt+=curr; curr=0; } } rep(i,0,n-1) printf("%d ",ans[i]); return puts(""),0; }