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);
}