1506E Restoring the Permutation (优先队列)

题目

思路:首先可以肯定的是,在某个数第一次出现时,在那个位置一定要填该数,因为它更新了那个最大的数,这些数的位置是固定的。
对于求最小的情况,只需从1–n开始填那些不是固定的数空出来的地方,如果该数是上文提到的固定的数则跳过。
对于求最大的情况,创建一个multiset(当作一个优先队列来使用,按降序排列),从开始的位置1遍历到n,如果遇到一个固定的数则输出该数,然后将该数之前到上一个固定数之间的数insert进multiset。如果该位置不是固定的数,则将multiset中最大的数输出,然后erase掉该数。这样做的原因是,要想数列最大,又不能超过前面那个数,如果超过了就会造成更新,而更新的固定的数已经确定,所以每次遇到一个新的最大数就将其和上一个最大数之间的数压进优先队列,每次输出队列中的最大数。

Code:

#include<iostream>
#include<map>
#include<set>
using namespace std;
const int Max = 1e6 + 5;
int lst[Max], ls[Max];

int main()
{
	int t;cin >> t;
	while (t--)
	{
		int n;cin >> n;
		multiset<int,greater<int>> set;
		map<int, int> ma;
		for (int i = 1;i <= n;i++)
		{
			int a;cin >> a;
			lst[i] = a;
			ma[a]++;
		}
		for (int i = 1;i <= n;i++)
		{
			if (lst[i] == lst[i - 1])ls[i] = 0;
			else ls[i] = lst[i];
		}
		int g = 1;
		for (int i = 1;i <= n;i++)
		{
			if (ls[i])cout << ls[i] << " ";
			else
			{
				while (ma[g] != 0) g++;
				cout << g++ << " ";
			}
		}
		cout << endl;
		int l=0;
		for (int i = 1;i <= n;i++)
		{
			if (ls[i])
			{
				for (int j = l+1;j <= ls[i]-1;j++) set.insert(j);
				cout << ls[i] << " ";
				l = ls[i];
			}
			else
			{
				cout << *set.begin() << " ";
				set.erase(set.begin());
			}
		}
		cout << endl;
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当程序在加载检查点时失败并出现"failed to load checkpoint, restoring previous"的错误信息时,意味着程序无法成功加载检查点,并正在恢复到先前保存的状态。 检查点是在机器学习或深度学习训练过程中定期保存的模型的快照。它通常用于在训练过程中定期保存模型的参数和优化器的状态,以便在需要时恢复训练过程。 "failed to load checkpoint"的错误信息表示加载检查点时出现了问题,可能是由于以下原因之一: 1. 检查点文件丢失或损坏:如果检查点文件在加载过程中丢失或损坏,程序将无法成功加载检查点。 2. 版本不兼容:如果使用的程序或库的版本与保存检查点时的版本不兼容,也可能导致加载失败。 在出现这个错误时,程序会尝试从先前保存的状态中进行恢复,这是为了最大限度地减少训练过程中的数据丢失。 为了解决这个问题,可以尝试以下步骤: 1. 检查检查点文件:确保检查点文件存在并且完好无损。如果文件丢失或损坏,你可能需要寻找其他备份或重新训练模型。 2. 检查版本兼容性:确保使用的程序和库的版本与保存检查点时的版本相匹配。如果版本不兼容,可以尝试更新程序或库,或者重新保存检查点。 最后,如果以上步骤都没有解决问题,你可能需要查找相关的错误消息和日志来获取更多的信息,或者在相关的社区或论坛上寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Rikka_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值