比赛 2026.8.26 评测结果 C
题目名称 sort 最终得分 0
用户昵称 终焉折枝 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2026-08-26 11:35:22
显示代码纯文本
#include<iostream>
#include<algorithm>
using namespace std;

#define ciallo(x) cout << x << '\n'
#define i64 int64_t
#define i32 int32_t
#define pb push_back
#define vi vector<i32>
#define sz(x) (i32)x.size()
#define all(x) x.begin(), x.end()

i32 n;
i64 ans = 0;
bool hs = false;

int main(){
    freopen("sorttros.in", "r", stdin);
    freopen("sorttros.out", "w", stdout);
    cin >> n; vi a(n);
    bool F = 1;
    for(i32 i = 0;i < n;i ++){
        cin >> a[i];
        if(a[i] != n - (i + 1) + 1) F = 0;
    }
    if(F){
        for(i32 i = 0;i < n;i ++) ans += i;
        cout << ans << '\n';
//        cout << "SHIT\n";
        return 0;
    }
    i32 pos = n;
    while(sz(a) > 1){
        i32 pos = sz(a);
//        ciallo(pos);
        bool flag = true;
        for(i32 i = 0;i < pos - 1;i ++){
            if(a[i] > a[i + 1]){
                flag = false;
                break;
            }
        }
        if(flag){
            ans += (pos - 1);
            if(pos >= 3) hs = true;
            break;
        }
        i32 p = 0;
        for(i32 i = 0;i < pos;i ++){
            if(a[i] == pos){
                p = i + 1;
                break;
            }
        }
//        ciallo(p);
        if(p >= 3) hs = true;
        i32 mx1 = -1, mx2 = -1;
        for(i32 i = pos - 1;i >= p;i --){
            if(a[i] > mx1){
                mx1 = a[i];
                ans ++;
            }
        }
        for(i32 i = 0;i < p - 1;i ++){
            mx2 = max(mx2, a[i]);
        }
//        ciallo(mx1);
//        ciallo(mx2);
        if(p >= 2 && mx2 > mx1) ans ++;
        vi nxt; nxt.reserve(pos - 1); i32 mx = -1;
        for(i32 i = 0;i < p - 1;i ++){
            if(mx == -1){
                mx = a[i];
            }
            else if(a[i] < mx){
                nxt.pb(a[i]);
            }
            else{
                nxt.pb(mx);
                mx = a[i];
            }
        }
        if(mx != -1) nxt.pb(mx);
        for(i32 i = p;i < pos;i ++) nxt.pb(a[i]);
//        for(int x : nxt) cout << x << ' ';
//		cout << '\n';
        a = move(nxt);
    }
    if(hs) ans ++;
    cout << ans << '\n';
    return 0;
}