uva1623

分析:找出当前下雨天之前的最后一个满湖的位置,从当前开始找不下雨天。

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1e6 + 5;int lake[maxn];
int ans[maxn];
set s;
vector v;int main()
{int T; scanf("%d", &T);for (int k = 1; k <= T; k++) {int n, m; scanf("%d%d", &n, &m);memset(lake + 1, 0, sizeof(int)*n);s.clear(); v.clear();bool fail = false;for (int i = 1; i <= m; i++) {int t;scanf("%d", &t);if (t) {set::iterator it = s.lower_bound(lake[t]);if (it != s.end()) {ans[*it] = t;lake[t] = i;//更新最后一个满湖位置信息s.erase(it);}else {for (; i < m; i++) scanf("%d", &t);fail = true;}}else {v.push_back(i);ans[i] = 0;s.insert(i);}}if (fail) {puts("NO");}else {printf("YES"); printf("\n%d", ans[v[0]]);for (int i = 1; i < v.size(); i++) {printf(" %d", ans[v[i]]);}putchar('\n');}}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部