C. Serval and Toxel's Arrays
#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e6 + 5;
const int inf = 1e18;
void solve()
{
int n,m;
cin >> n >> m;
vector<int> a(n+m+5),p(n+m+5),v(n+m+5);
vector<vector<int>> pos(n+m+5);
map<int,int> vis;
for(int i= 1; i<=n; i++)
{
cin >> a[i];
pos[a[i]].push_back(0);//a[i]被添加操作
}
for(int i = 1; i<=m; i++)
{
cin >> p[i] >> v[i];
pos[a[p[i]]].push_back(i);
a[p[i]] = v[i];
pos[v[i]].push_back(i);
}
for(int i = 1; i<=n; i++)
{
pos[a[i]].push_back(m+1);//假设存在第m+1次把所有元素都操作了
}
int ans = 0;
for(int i = 1; i<=n+m; i++)
{
int cnt = 0;
for(int j = 0;j <pos[i].size(); j+=2)
{
if(j+1 >=pos[i].size())
{
break;
}
cnt+=pos[i][j+1]-pos[i][j];//出现次数
}
int last = m+1-cnt;//剩下的
ans+=last*cnt;
ans+=(cnt*(cnt-1))/2;
}
cout << ans << endl;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}