| 比赛 |
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;
}