比赛 2026.8.26 评测结果 AAAAAAAAAAAAAAATTTTTTTTTT
题目名称 sort 最终得分 60
用户昵称 exil 运行时间 3.323 s
代码语言 C++ 内存使用 7.58 MiB
提交时间 2026-08-26 11:56:04
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[2000005];
int b[2000005];
int xu;
int cnt;
int shu[1000005];
int lowbit(int x){
    return x& -x;
}
void jia(int x){
    //int y=x;
    while(x<=500005){
        shu[x]+=1;
        x+=lowbit(x);
    }
}
int cha(int x){
    int c=0;
    while(x>0){
        c+=shu[x];
        x-=lowbit(x);
    }
    return c;
}


signed main(){
    freopen("sorttros.in","r",stdin);
    freopen("sorttros.out","w",stdout); 
    
    
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n;
    cin>>n;
    
    
    int y=0;
    for(int i = 1;i<=n;i++){
        cin>>a[i];
        
    }
    for(int i = 1;i<=n;i++)if(a[i+1]>a[i])y=1;
    
    if(y==0){
        int t=1;
        int x=2;
        for(int i = 2;i<n;i++){
            t+=x;
            x+=1;
        }
        cout<<t;
        return 0;
        
        
    }
    int ans=1;
    
    
    
    if(n<=100){
        for(int i = 1;i<n;i++){
            xu+=i;
        }
        set<string>ss;
        for(int i = 1;i<=xu;i++){
            for(int j = 1;j<=n;j++)b[j]=a[j];
            
            
            
            for(int j = 1;j<=n;j++){
                for(int k = 1;k<=n-j;k++){
                    cnt++;
                    if(cnt==i){
                        if(b[k]<b[k+1])swap(b[k],b[k+1]);
                    }
                    else{
                        if(b[k]>b[k+1])swap(b[k],b[k+1]);
                    }
                }
            }
            string s;
            for(int j = 1;j<=n;j++){
                s=s+to_string(b[j]);
                
            }
            int r=ss.size();
            ss.insert(s);
            if(ss.size()>r){
                //for(int j = 1;j<=n;j++)cout<<b[j]<<" ";
                //cout<<endl<<i<<endl;
            }
            cnt=0;
        }
        cout<<ss.size();
        return 0;
    }
    for(int i = 1;i<n;i++){
        int wei=0;
        for(int j = 1;j<=n-i+1;j++){
            if(a[j]==n-i+1){
                wei=j;
                break;
            } 
        }
        //cout<<wei<<endl;
        for(int j = 1;j<=n-i+1;j++){
            shu[j]=0;
        }
        for(int j = 1;j<=n-i+1;j++){
            
            if(j<wei){
                if(a[j]==n-i){
                    ans++;
                    
                    
                }
            }
            if(j>wei){
                
                if(cha(n-i+1)-cha(a[j])+a[j]==n-i+1){
                    ans++;
                    
                }
            }
            jia(a[j]);
        }
        
        
        
        for(int j = 1;j<=n-i;j++){
            if(a[j]>a[j+1])swap(a[j],a[j+1]);
        }
        //cout<<ans<<endl;
        
        
        
        
    }
    if(y==0)ans--;
    cout<<ans;
    return 0;
}