from bisect import bisect_left
from sys import stdin
input = stdin.buffer.readline
def func():
index = [i+1 for i in range(n) if i+1 > a[i]]
count = sum(bisect_left(index, a[index[i]-1]) for i in range(len(index)))
print(count)
for _ in range(int(input())):
n = int(input())
a = list(map(int, input().split()))
func()
#include <bits/stdc++.h>
using namespace std;
#define gogo ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const string YES = "YES";
const string NO = "NO";
template <typename T>
class BIT {
public:
vector<T> c;
int n;
BIT(int _n) : n(_n) {
c.resize(n);
}
void modify(int x, T v) {
while (x < n) {
c[x] += v;
x |= (x + 1);
}
}
T query(int x) {
T v{};
while (x >= 0) {
v += c[x];
x = (x & (x + 1)) - 1;
}
return v;
}
T get(int l, int r) {
return get(r) - get(l - 1);
}
};
void run() {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1;i <= n;i ++)
cin >> a[i];
BIT<int> c(n + 1);
long long ans = 0;
for (int i = 1;i <= n;i ++) {
if (a[i] < i) {
//cout << "zzzz" << c.query(a[i] - 1) << endl;
if (a[i] - 1> 0) ans += c.query(a[i] - 1);
c.modify(i, 1);
}
}
cout << ans << endl;
}
int32_t main() {
gogo;
int tt;
cin >> tt;
while (tt --)
run();
return 0;
}
1230B - Ania and Minimizing | 1201A - Important Exam |
676A - Nicholas and Permutation | 431A - Black Square |
474B - Worms | 987B - High School Become Human |
1223A - CME | 1658B - Marin and Anti-coprime Permutation |
14B - Young Photographer | 143A - Help Vasilisa the Wise 2 |
320A - Magic Numbers | 1658A - Marin and Photoshoot |
514A - Chewbaсca and Number | 382A - Ksenia and Pan Scales |
734B - Anton and Digits | 1080A - Petya and Origami |
1642D - Repetitions Decoding | 1440A - Buy the String |
1658F - Juju and Binary String | 478A - Initial Bet |
981A - Antipalindrome | 365A - Good Number |
1204B - Mislove Has Lost an Array | 1409D - Decrease the Sum of Digits |
1476E - Pattern Matching | 1107A - Digits Sequence Dividing |
1348A - Phoenix and Balance | 1343B - Balanced Array |
1186A - Vus the Cossack and a Contest | 1494A - ABC String |