#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define pb push_back
const int N=4555;
int l[N];
int bit[N];
vector<int>ans;
int par[N];
vector<int>v;
int c=0;
void update(int idx, int val){
while(idx<N){
bit[idx]+=val;
idx+= idx & -idx;
}
}
int find(int idx){
if(idx<=0)return 0;
int s=0;
while(idx>0){
s+=bit[idx];
idx -= idx & -idx;
}
return s;
}
void dfs(int a){
c+= find(l[a]-1);
update(l[a],1);
if(a==1)return;
dfs(par[a]);
}
void fun(int a, int b){
l[a]=l[b];
if(b==1)return;
fun(par[a],a);
}
signed main(){
int n;
cin>>n;
map<int,int>tmp;
for(int i=1;i<=n;i++){
cin>>l[i];
tmp[l[i]];
}
int id=1;
for(auto it=tmp.begin();it!=tmp.end();it++)it->ss= id++;
for(int i=1;i<=n;i++)l[i]=tmp[l[i]];
par[1]=1;
for(int i=1;i<n;i++){
int a,b;
cin>>a>>b;
for(int j=0;j<N;j++)bit[j]=0;
c=0;
par[b]=a;
dfs(a);
fun(a,b);
ans.pb(c);
}
for(auto a:ans)cout<<a<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |