CF283E Cow Tennis Tournament

题目描述

Farmer John 正在举办一场由 $n$ 头牛参加的网球锦标赛。每头牛有一个技能等级 $s_{i}$,且没有两头牛的技能等级相同。在比赛中,每头牛会与其他每一头牛各比赛一次,每头牛都会战胜所有技能等级比自己低的牛。 然而 Farmer John 认为对于最弱的牛来说,输掉大部分或全部比赛会令人泄气,因此他打算翻转部分比赛结果。具体来说,他会进行 $k$ 次操作,每次操作给定两个整数 $a_{i},b_{i}$ $(a_{i}

输入格式

第一行包含两个用空格分隔的整数 $n$ 和 $k$,$(3 \leq n \leq 10^{5};\ 0 \leq k \leq 10^{5})$。 第二行包含 $n$ 个用空格分隔的互不相同的整数,$s_{1},s_{2},...,s_{n}$,$(1 \leq s_{i} \leq 10^{9})$,表示每头牛的技能等级。 接下来 $k$ 行,每行两个用空格分隔的整数 $a_{i}, b_{i}$,$(1 \leq a_{i} < b_{i} \leq 10^{9})$,表示 Farmer John 按顺序对记分板进行的翻转操作。

输出格式

输出一个整数,表示有多少组三元组 $(p, q, r)$ 满足最终记分板上牛 $p$ 战胜牛 $q$,牛 $q$ 战胜牛 $r$,且牛 $r$ 战胜牛 $p$。 请不要在 C++ 中使用 %lld 作为读写 64 位整数的格式。建议使用 cin, cout 流或者 %I64d。

说明/提示

在第一个样例中,牛 3 > 牛 1,牛 3 > 牛 2,牛 2 > 牛 1。然而,1 和 2 之间、2 和 3 之间的结果都被翻转,所以现在 Farmer John 记分板上显示的是牛 1 > 牛 2,牛 2 > 牛 3,牛 3 > 牛 1,因此牛 1、2、3 组成了一个均衡三元组。 由 ChatGPT 5 翻译