Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(PPPPPPPPPPPPPPPPPPP)(PPPPPPPPPPPPPPPPPPPPPP)

Subtask/Task Score:

{4/4}{4/4}{5/5}{7/7}{25/25}{34/34}{21/21}

Score: 100

User: mydKN

Problemset: ร้านปลอดภาษี (Duty Free)

Language: cpp

Time: 0.358 second

Submitted On: 2025-06-27 23:28:48

#include<bits/stdc++.h>

using namespace std;

const int maxn = 2e6 + 5;

int pa[maxn], ver[maxn];
int curr = 1, res;

int findset(int u){
	if(ver[u] != curr){
		ver[u] = curr;
		pa[u] = u;
	}
	if(pa[u] == u) return u;
	return pa[u] = findset(pa[u]);
}

void unite(int u, int v){
	u = findset(u);
	v = findset(v);
	pa[u] = v;
}

int minimum_bag_rearrangement_time(vector<int> mxpos){
	int n = (int)mxpos.size();
	iota(pa, pa+n+1, 0);
	for(int i=0;i<n;++i){
		int p = findset(mxpos[i]);
		if(p == 0){
			++res;
			++curr;
			--i;
			continue;
		}
		unite(p, p-1);
	}
	return res;
}