#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
cerr<<vars<<" = ";
string delim="";
(...,(cerr<<delim<<values,delim=", "));
cerr<<"\n";
}
#else
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {}
#endif
#define pb push_back
#define sz(x) (int)(x.size())
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> inline void maxa(T& a,T b){a=max(a,b);}
template<typename T> inline void mina(T& a,T b){a=min(a,b);}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int mxN=1e5+5; //make sure this is right
const int mod=1e9+7;
int main(){
cin.sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int n,k; cin>>n>>k;
int cnt=0;
vector<int> a(n),f(n),amt(n);
for(int &i:a)
cin>>i;
for(int i=n-1;i>=0;i--){
if(cnt<a[i]){ //false
f[i]=1;
cnt++;
}
amt[i]=cnt;
}
queue<pii> q;
auto change=[&](pii pr){
int i=pr.first;
int j=pr.second;
if(!f[j])
return;
if(cnt<k && f[i])
return;
if(cnt>k && !f[j])
return;
if(cnt==k)
return;
swap(f[i],f[j]);
swap(a[i],a[j]);
swap(amt[i],amt[j]);
if(f[i])
amt[j]--;
if(!f[j] && amt[j]<a[j]){
f[j]=1; cnt++;
}
if(f[j])
amt[i]++;
if(f[i] && amt[i]>=a[i]){
f[i]=0; cnt--;
}
if(i){
if(cnt<k && f[i] && !f[i-1])
q.push({i-1,i});
if(cnt>k && f[i] && f[i-1])
q.push({i-1,i});
}
if(j<n-1){
if(cnt<k && !f[j] && f[j+1])
q.push({j,j+1});
if(cnt>k && f[j] && f[j+1])
q.push({j,j+1});
}
};
for(int i=0;i<n-1;i++){
if(cnt<k && !f[i] && f[i+1])
q.push({i,i+1});
if(cnt>k && f[i] && f[i+1])
q.push({i,i+1});
}
while(!q.empty() && sz(q)){
change(q.front());
q.pop();
}
if(cnt!=k){
cout<<-1<<"\n";
return 0;
}
for(int i=0;i<n;i++)
cout<<a[i]<<" \n"[i==n-1];
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
299 ms |
65540 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
204 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
296 ms |
65540 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
315 ms |
65540 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1051 ms |
1656 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
329 ms |
65540 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
333 ms |
65540 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |