#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 1e6 + 7;
int last[maxn],input[maxn],output[maxn],n,m;
int main()
{
int t;
cin >> t;
set<int> mset;
while (t--) {
mset.clear();
cin >> n >> m;
memset(last, 0, sizeof(last));
for (int i = 1; i <= m; i++) {
cin >> input[i];
output[i] = 0;
}
bool ok = true;
for (int i = 1; i <= m; i++) {
if (input[i] == 0) {
mset.insert(i);
}
else {
auto it = mset.lower_bound(last[input[i]]);
if (it == mset.end()) {
ok = false; break; }
output[*it] = input[i];
last[input[i]] = i;
mset.erase(*it);
}
}
if (ok) {
cout << "YES" << endl;
int index = 1;
while (index <= m && input[index] != 0) {
++index; continue; }
cout << output[index++];
for (; index <= m; index++) {
if(input[index] != 0) continue;
cout <<" "<< output[index];
}
cout << endl;
}
else cout << "NO" << endl;
}
return 0;
}
习题8-23(uva-1623)
猜你喜欢
转载自blog.csdn.net/seanbill/article/details/117629093
今日推荐
周排行