1375D - Replace by MEX - CodeForces Solution


brute force constructive algorithms sortings *1900

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
 
int main()
{
	ll t;
	cin>>t;
	read:
	while(t--){
		ll n;
		cin>>n;
 
		ll id[n+1],a[n+1];
		memset(id,0,sizeof(id));
		set<ll> m;
		vector<ll> ans;
		for(ll i=1;i<=n;i++){
			cin>>a[i];
			id[a[i]]++;
		}
		for(ll i=0;i<=n;i++){
			if(!id[i]) m.insert(i);
		}
 
		ll mx=n;
		while(1){
			ll mex=*m.begin();
			m.erase(m.begin());
			id[mex]++;
			if(mex!=mx){
				id[a[mex+1]]--;
				if(!id[a[mex+1]]) m.insert(a[mex+1]);
				a[mex+1]=mex;
				ans.pb(mex+1);
			}
			else{
				if(!mex) break;
				mx--;
				id[a[mex]]--;
				if(!id[a[mex]]) m.insert(a[mex]);
				a[mex]=mex;
				ans.pb(mex);
			}
			if(!mx) break;
		}
 
		cout<<ans.size()<<endl;
		for(ll i=0;i<ans.size();i++) cout<<ans[i]<<" ";cout<<endl;
	}

    return 0;
}


Comments

Submit
0 Comments
More Questions

1382A - Common Subsequence
1512D - Corrupted Array
667B - Coat of Anticubism
284B - Cows and Poker Game
1666D - Deletive Editing
1433D - Districts Connection
2B - The least round way
1324A - Yet Another Tetris Problem
246B - Increase and Decrease
22E - Scheme
1566A - Median Maximization
1278A - Shuffle Hashing
1666F - Fancy Stack
1354A - Alarm Clock
1543B - Customising the Track
1337A - Ichihime and Triangle
1366A - Shovels and Swords
919A - Supermarket
630C - Lucky Numbers
1208B - Uniqueness
1384A - Common Prefixes
371A - K-Periodic Array
1542A - Odd Set
1567B - MEXor Mixup
669A - Little Artem and Presents
691B - s-palindrome
851A - Arpa and a research in Mexican wave
811A - Vladik and Courtesy
1006B - Polycarp's Practice
1422A - Fence