乱序输入n个数,从头开始取  如果这个是最小的(在现在的数组中)就删除否则放到最后面  问需要取几次才能把全部删除
1 ≤ n ≤ 100 000,1 ≤ ai ≤ 100 000
方法一 :
分析每次都是先把最小的取出再取次小的数  所以以最右的的最小值为分界线  左边次小的次数为dis(初始时为1每循环一次加一),而右边的尾dis+1(需要循环一次才能取到),所以时间复杂度为O(ai)
ac代码:
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    vector<int>vec[MAX+6];
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        vec[x].push_back(i);
    }
    long long  ans=0,p=0,dis=1;
    for(int i=1;i<=MAX;i++){
        if(vec[i].empty()) continue;
        vector<int>::iterator iter =lower_bound(vec[i].begin(),vec[i].end(),p);
        ans+=dis*(vec[i].end()-iter);
//        cout<<ans<<endl;
        p=vec[i].back();
        vec[i].erase(iter,vec[i].end());
        if(vec[i].size()){
            p=0;
            dis++;
            i--;
        }
    }
    cout<<ans<<"\n";
}