/// KoJa
#include <bits/stdc++.h>
using namespace std;
#define task "test"
#define pb push_back
#define SZ(a) (a).begin(), (a).end()
#define SZZ(a, Begin, End) (a) + (Begin), (a) + (Begin) + (End)
#define BIT(a) (1LL << (a))
#define vec vector
#define fi first
#define se second
typedef long long ll;
typedef pair<int, int> ii;
template <class T>
inline bool maximize(T &a, const T &b) { return (a < b ? (a = b, 1) : 0); }
template <class T>
inline bool minimize(T &a, const T &b) { return (a > b ? (a = b, 1) : 0); }
void fastio()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
if (fopen(task ".inp", "r"))
{
freopen(task ".inp", "r", stdin);
freopen(task ".out", "w", stdout);
}
}
const int N = int(1e6) + 100;
const ll INF = 1e18;
int n, w[N];
struct Edge1
{
int x, y, w;
Edge1() {}
Edge1(int _x, int _y, int _w)
{
x = _x;
y = _y;
w = _w;
}
bool operator<(const Edge1 &b) const
{
return (w < b.w);
}
};
struct Edge2
{
int x, y, w;
Edge2() {}
Edge2(int _x, int _y, int _w)
{
x = _x;
y = _y;
w = _w;
}
bool operator<(const Edge2 &b) const
{
return (w > b.w);
}
};
class DisjointsSet
{
private:
vec<int> par;
public:
DisjointsSet(int n = 0)
{
par.assign(n + 10, -1);
}
int root(int u)
{
return ((par[u] < 0) ? u : par[u] = root(par[u]));
}
bool join(int u, int v)
{
u = root(u);
v = root(v);
if (u == v)
return 0;
if (-par[u] < -par[v])
swap(u, v);
par[u] += par[v];
par[v] = u;
return 1;
}
int getSize(int u)
{
return -par[root(u)];
}
} dsu;
vec<Edge1> edge1;
vec<Edge2> edge2;
void init()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> w[i];
for (int i = 1; i <= n - 1; i++)
{
int x, y;
cin >> x >> y;
edge1.pb(Edge1(x, y, max(w[x], w[y])));
edge2.pb(Edge2(x, y, min(w[x], w[y])));
}
}
ll calcMax()
{
ll ans = 0;
dsu = DisjointsSet(n);
sort(SZ(edge1));
for (auto e : edge1)
{
ans += 1LL * e.w * dsu.getSize(e.x) * dsu.getSize(e.y);
dsu.join(e.x, e.y);
}
return ans;
}
ll calcMin()
{
ll ans = 0;
dsu = DisjointsSet(n);
sort(SZ(edge2));
for (auto e : edge2)
{
ans += 1LL * e.w * dsu.getSize(e.x) * dsu.getSize(e.y);
dsu.join(e.x, e.y);
}
return ans;
}
void process()
{
cout << calcMax() - calcMin();
}
int main()
{
fastio();
init();
process();
return 0;
}
Ly8vIEtvSmEKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdGFzayAidGVzdCIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBTWihhKSAoYSkuYmVnaW4oKSwgKGEpLmVuZCgpCiNkZWZpbmUgU1paKGEsIEJlZ2luLCBFbmQpIChhKSArIChCZWdpbiksIChhKSArIChCZWdpbikgKyAoRW5kKQojZGVmaW5lIEJJVChhKSAoMUxMIDw8IChhKSkKI2RlZmluZSB2ZWMgdmVjdG9yCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsgcmV0dXJuIChhIDwgYiA/IChhID0gYiwgMSkgOiAwKTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgeyByZXR1cm4gKGEgPiBiID8gKGEgPSBiLCAxKSA6IDApOyB9CnZvaWQgZmFzdGlvKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhOVUxMKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBpZiAoZm9wZW4odGFzayAiLmlucCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3Blbih0YXNrICIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrICIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQp9Cgpjb25zdCBpbnQgTiA9IGludCgxZTYpICsgMTAwOwpjb25zdCBsbCBJTkYgPSAxZTE4OwppbnQgbiwgd1tOXTsKc3RydWN0IEVkZ2UxCnsKICAgIGludCB4LCB5LCB3OwogICAgRWRnZTEoKSB7fQogICAgRWRnZTEoaW50IF94LCBpbnQgX3ksIGludCBfdykKICAgIHsKICAgICAgICB4ID0gX3g7CiAgICAgICAgeSA9IF95OwogICAgICAgIHcgPSBfdzsKICAgIH0KICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEVkZ2UxICZiKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAodyA8IGIudyk7CiAgICB9Cn07CnN0cnVjdCBFZGdlMgp7CiAgICBpbnQgeCwgeSwgdzsKICAgIEVkZ2UyKCkge30KICAgIEVkZ2UyKGludCBfeCwgaW50IF95LCBpbnQgX3cpCiAgICB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHkgPSBfeTsKICAgICAgICB3ID0gX3c7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBFZGdlMiAmYikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKHcgPiBiLncpOwogICAgfQp9OwpjbGFzcyBEaXNqb2ludHNTZXQKewpwcml2YXRlOgogICAgdmVjPGludD4gcGFyOwoKcHVibGljOgogICAgRGlzam9pbnRzU2V0KGludCBuID0gMCkKICAgIHsKICAgICAgICBwYXIuYXNzaWduKG4gKyAxMCwgLTEpOwogICAgfQogICAgaW50IHJvb3QoaW50IHUpCiAgICB7CiAgICAgICAgcmV0dXJuICgocGFyW3VdIDwgMCkgPyB1IDogcGFyW3VdID0gcm9vdChwYXJbdV0pKTsKICAgIH0KICAgIGJvb2wgam9pbihpbnQgdSwgaW50IHYpCiAgICB7CiAgICAgICAgdSA9IHJvb3QodSk7CiAgICAgICAgdiA9IHJvb3Qodik7CiAgICAgICAgaWYgKHUgPT0gdikKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKC1wYXJbdV0gPCAtcGFyW3ZdKQogICAgICAgICAgICBzd2FwKHUsIHYpOwogICAgICAgIHBhclt1XSArPSBwYXJbdl07CiAgICAgICAgcGFyW3ZdID0gdTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGludCBnZXRTaXplKGludCB1KQogICAgewogICAgICAgIHJldHVybiAtcGFyW3Jvb3QodSldOwogICAgfQp9IGRzdTsKdmVjPEVkZ2UxPiBlZGdlMTsKdmVjPEVkZ2UyPiBlZGdlMjsKdm9pZCBpbml0KCkKewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgY2luID4+IHdbaV07CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuIC0gMTsgaSsrKQogICAgewogICAgICAgIGludCB4LCB5OwogICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgZWRnZTEucGIoRWRnZTEoeCwgeSwgbWF4KHdbeF0sIHdbeV0pKSk7CiAgICAgICAgZWRnZTIucGIoRWRnZTIoeCwgeSwgbWluKHdbeF0sIHdbeV0pKSk7CiAgICB9Cn0KbGwgY2FsY01heCgpCnsKICAgIGxsIGFucyA9IDA7CiAgICBkc3UgPSBEaXNqb2ludHNTZXQobik7CiAgICBzb3J0KFNaKGVkZ2UxKSk7CiAgICBmb3IgKGF1dG8gZSA6IGVkZ2UxKQogICAgewogICAgICAgIGFucyArPSAxTEwgKiBlLncgKiBkc3UuZ2V0U2l6ZShlLngpICogZHN1LmdldFNpemUoZS55KTsKICAgICAgICBkc3Uuam9pbihlLngsIGUueSk7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CmxsIGNhbGNNaW4oKQp7CiAgICBsbCBhbnMgPSAwOwogICAgZHN1ID0gRGlzam9pbnRzU2V0KG4pOwogICAgc29ydChTWihlZGdlMikpOwogICAgZm9yIChhdXRvIGUgOiBlZGdlMikKICAgIHsKICAgICAgICBhbnMgKz0gMUxMICogZS53ICogZHN1LmdldFNpemUoZS54KSAqIGRzdS5nZXRTaXplKGUueSk7CiAgICAgICAgZHN1LmpvaW4oZS54LCBlLnkpOwogICAgfQogICAgcmV0dXJuIGFuczsKfQp2b2lkIHByb2Nlc3MoKQp7CiAgICBjb3V0IDw8IGNhbGNNYXgoKSAtIGNhbGNNaW4oKTsKfQppbnQgbWFpbigpCnsKICAgIGZhc3RpbygpOwogICAgaW5pdCgpOwogICAgcHJvY2VzcygpOwogICAgcmV0dXJuIDA7Cn0K