#include<iostream>#include<bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =3e5+7;int n,m,k,t =1,cas =1;int a[N],b[N];int sel =0;int pre[N];int suf[N];int mark[N]={0};int mark2[N]={0};signedmain(){//cin>>t;while(t--){
vector<int> f0;
cin>>n;for(int i =1; i <= n ; i ++){
mark[i]=0;
mark2[i]=0;}for(int i =1; i <= n ; i ++){
cin>>a[i];
mark[a[i]]=1;if(a[i]==0){
mark2[i]=1;
f0.push_back(i);}}for(int i =1; i <= n; i ++){if(!mark[i]&& mark2[i]){int x = f0[f0.size()-1]; f0.pop_back();if(x == i){int tmp = x;
x = f0[f0.size()-1];
f0.pop_back();
f0.push_back(tmp);}
a[x]= i;
mark[i]=1;}}for(int i =1; i <= n; i ++){if(!mark[i]){
a[f0[f0.size()-1]]= i;
f0.pop_back();}}for(int i =1; i <= n ; i ++){
cout<<a[i]<<" ";}
cout<<endl;}}
#include<iostream>#include<bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =3e5+7;int n,m,k,t =1,cas =1;int a[N],b[N];int ans[N];int sel =0;
map<int,int> mp;boolcheck(int mid){int tmp =2*mid;for(int i =1; i <= n-1; i ++){int dis = a[i+1]-a[i]-1;
tmp +=min(2*mid,dis);if(tmp >= m)returntrue;}if(tmp >= m)returntrue;returnfalse;}signedmain(){//cin>>t;while(t--){
cin>>n>>m;
a[0]=-2e9;for(int i =1; i <= n; i ++){
cin>>a[i];
mp[a[i]]=1;}
a[n+1]=2e9;sort(a+1,a+1+n);int minn =1e18;int l =1, r = m;while(l <= r){int mid =(l+r)>>1;if(check(mid)){
minn =min(minn,mid);
r = mid-1;}else l = mid+1;}int res =0;int cnt =0;for(int i =1; i <= n ; i ++){for(int j =1; j < minn ; j ++){// rightif(!mp[a[i]+j]){
mp[a[i]+j]=1;
ans[cnt ++]= a[i]+j;
res +=min(j,abs(a[i+1]-(a[i]+j)));}elsebreak;}for(int j =1; j < minn ; j ++){// leftif(!mp[a[i]-j]){
mp[a[i]-j]=1;
ans[cnt ++]= a[i]-j;
res +=min(j,abs((a[i]-j)-a[i-1]));}elsebreak;}}//cout<<cnt<<endl;for(int i =1; i <= n ; i ++){if(cnt == m)break;if(!mp[a[i]+minn]){
mp[a[i]+minn]=1;
ans[cnt ++]= a[i]+minn;
res += minn;}if(cnt == m)break;if(!mp[a[i]-minn]){
mp[a[i]-minn]=1;
ans[cnt ++]= a[i]-minn;
res += minn;}if(cnt == m)break;}
cout<<res<<endl;sort(ans,ans+m);for(int i =0; i < m ; i ++)
cout<<ans[i]<<" ";
cout<<endl;}}
AC代码2(bfs):
#include<iostream>#include<bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =3e5+7;int n,m,k,t =1,cas =1;int a[N],b[N];int ans[N];int sel =0;
map<int,int> mp;struct node{int x,w;node(int a,int b):x(a),w(b){}};
queue<node> que;signedmain(){//cin>>t;while(t--){
cin>>n>>m;
a[0]=-2e9;for(int i =1; i <= n; i ++){
cin>>a[i];
mp[a[i]]=1;
que.push(node(a[i],0));}int cnt =0;int res =0;while(1){
node now = que.front();que.pop();
res += now.w;if(now.w !=0) ans[cnt++]= now.x;if(cnt == m)break;if(!mp[now.x+1]) mp[now.x+1]=1,que.push(node(now.x+1,now.w+1));if(!mp[now.x-1]) mp[now.x-1]=1,que.push(node(now.x-1,now.w+1));}
cout<<res<<endl;for(int i =0; i < m ; i ++) cout<<ans[i]<<" ";
cout<<endl;}}
#include<iostream>#include<bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =3e5+7;int n,m,k,t =1,cas =1;int a[N],b[N];int ans[N];int sel =0;
map<int,int> mp;struct node{int x,w;node(int a,int b):x(a),w(b){}};
queue<node> que;signedmain(){//cin>>t;while(t--){
cin>>n;for(int i =0; i < n; i ++)
cin>>a[i],b[i]= a[i];int minn =1;int maxx =1;sort(b,b+n);
b[0]-=1;
mp[b[0]]=1;for(int i =1; i < n ; i ++){if(!mp[b[i]-1]){
b[i]-=1;}elseif(!mp[b[i]]){;}elseif(!mp[b[i]+1]){
b[i]+=1;}
mp[b[i]]=1;}sort(b,b+n);for(int i =1; i < n ; i ++){if(b[i]!= b[i-1]) maxx++;}int cnt =0;for(int i =0; i < n ; i ++){if(i ==0|| a[i]!= b[cnt-1])
b[cnt++]= a[i];}
n = cnt;sort(b,b+n);
b[0]+=1;for(int i =1; i < n ; i ++){if(b[i]-1== b[i-1]) b[i]-=1;elseif(b[i]!= b[i-1]) b[i]+=1;}for(int i =1; i < n ; i ++){if(b[i]!= b[i-1]) minn++;}
cout<<minn<<" "<<maxx<<endl;}}