Submission
Status:
(PPPPPPPPP-SSS)(PPPPPPPPP)(PPPPPPPPPP)(-SSSSSSSSS)(-SSSSSSSSSSSSS)(-SSSSSSSSSSSSSSSSSS)(P-SSSSSSSSSSSSSSSSSSSS)
Subtask/Task Score:
{0/4}{4/4}{5/5}{0/7}{0/25}{0/34}{0/21}
Score: 9
User: meme_boi2
Problemset: ร้านปลอดภาษี (Duty Free)
Language: cpp
Time: 0.160 second
Submitted On: 2025-11-02 10:43:56
#include <bits/stdc++.h>
using namespace std;
int pa[2000002];
vector<int> vec;
int find(int i){
// cout << "FIND i : " << i << '\n';
if(pa[i] == i) return i;
else return pa[i] = find(pa[i]);
}
void reset(){
for(auto x:vec){
pa[x] = x;
}
vec.clear();
}
int cnt = 0;
int minimum_bag_rearrangement_time (std::vector<int> max_allowed_positions){
int n = max_allowed_positions.size();
// max_allowed_positions.insert(max_allowed_positions.begin(),0);
for(int i = 0; i <= n; i++) pa[i] = i;
for(int i = 0; i < n; i++){
int temp = find(max_allowed_positions[i]);
// cout << max_allowed_positions[i] << '\n';
if(pa[max_allowed_positions[i]] == 0){
// cout << temp << ' ' << i << '\n';
cnt++;
reset();
}
vec.push_back(pa[max_allowed_positions[i]]);
pa[max_allowed_positions[i]] = find(pa[max_allowed_positions[i]]-1);
}
return cnt;
}
int32_t __main(){
cin.tie(nullptr)->sync_with_stdio(0);
int n; cin >> n;
vector<int> mat(n);
for(auto &x: mat) cin >> x;
cout << minimum_bag_rearrangement_time(mat);
}