题目描述:

Polycarp analyzes the prices of the new berPhone. At his disposal are the prices for nn last days: a1,a2,…,ana1,a2,…,an, where aiai is the price of berPhone on the day ii.

Polycarp considers the price on the day ii to be bad if later (that is, a day with a greater number) berPhone was sold at a lower price. For example, if n=6n=6 and a=[3,9,4,6,7,5]a=[3,9,4,6,7,5], then the number of days with a bad price is 33 — these are days 22 (a2=9a2=9), 44 (a4=6a4=6) and 55 (a5=7a5=7).

Print the number of days with a bad price.

You have to answer tt independent data sets.

Input

The first line contains an integer tt (1≤t≤100001≤t≤10000) — the number of sets of input data in the test. Input data sets must be processed independently, one after another.

Each input data set consists of two lines. The first line contains an integer nn (1≤n≤1500001≤n≤150000) — the number of days. The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1061≤ai≤106), where aiai is the price on the ii-th day.

It is guaranteed that the sum of nn over all data sets in the test does not exceed 150000150000.

Output

Print tt integers, the jj-th of which should be equal to the number of days with a bad price in the jj-th input data set.

大致题意:

找到有多少个数存在后面的数比该数小

解题思路:

从数组的最后一个开始遍历到第一个,不断更新最小值,若存在前一个数大于最小值则个数加一

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int t,n,a[150010];
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        int flag=0,num=a[n];
        for(int i=n;i>=1;i--){
            num=min(a[i],num);
            if(a[i]>num)flag++;
        }
        cout<<flag<<endl;
    }
    return 0;
}