U-MEX and Increments
题意
给你个数列,让你求对应下标i使得整个数列MEX(i)的最小步数,其中MEX(i)是指出现的最小正整数.
题解:
首先计数把每个数字出现的次数记录,对于下标i,我们需要让0-i-1的数至少出现一次,然后让数字i全体加1,这里用动态规划的思想,假设dp[i]是使得数列出现0-i每个至少一个的最小步数 那么 ans[i+1]=dp[i]+cnt[i+1],此时满足0-i至少出现一次,且所有等于i+1的值都被加1,MEX就位i+1,对于dp的转移来说,dp[i+1]=dp[i]+(i+1- 数组中最接近i+1的一个数字),这里可以用优先队列处理,事实上我们会发现数一定是从小到大所以用栈也是可以处理的。具体的做法是,转移后,将i都推入优先队列或栈中,作为最接近i+1的一个备选答案,如果栈空说明个数不够,输出-1,随后所有数都不可能成立。更进一步的,发现dp只会用到上一个状态,那用一个变量记录即可。
#include<bits/stdc++.h>
using namespace std;
long long cnt[200005];
void slove()
{int n;cin>> n;for (int i = 0; i <=n; i++)cnt[i] = 0;for (int i = 0; i < n; i++){int t;cin >> t;cnt[t]++;}long long s = 0;//s代表dp[i-1];priority_queue<long long>q;for (int i = 0; i <= n; i++){printf("%lld ", max((long long)-1, s + cnt[i]));//输出ans[i]=dp[i-1]+cnt[i]while (cnt[i]--)q.push(i);//这些数可以作为后续转移答案if (!q.empty()){s += i - q.top();//dp[i]=dp[i-1]+(i- 数组中最接近i的一个数字)q.pop();//该数已被占用,不可重复使用。}else s = -1e18;}puts("");
}
int main()
{int t;cin >> t;while(t--)slove();
}
U-MEX and Increments相关推荐
- MEX and Increments
MEX and Increments 题面翻译 给你一个数列,每次可以花费 111 代价将其中一个数加一.从 000 到 nnn 分别输出至少要花费多少才能使这个数是数列中没有出现的最小的非负整数. ...
- E. MEX and Increments
E. MEX and Increments 链接 题意:数组每一个数都可以加任意次数的1 求当前数组中缺失为i(0<=i<=n)的操作个数 思路: 每一个i 都是构成前面的操作次数加上将当 ...
- #762 (Div. 3) E. MEX and Increments(贪心构造
E. MEX and Increments 题意: 思路: 贪心加模拟 code: #include<bits/stdc++.h> #define endl '\n' #define ll ...
- codeforces:E. MEX and Increments【贪心 + 略加优化】
分析 mex(a) 表示不在a中的最小非负整数 ans[i] 表示最少的操作数使得mex(a) = i 我们用个counter记录一下原始每个位置出现的次数 我们的思路很简单:找出缺口,然后把多余的平 ...
- Codeforces Round #762 (Div. 3)
E. MEX and Increments F. Let's Play the Hat? G. Unusual Minesweeper H. Permutation and Queries 用个优先 ...
- outlook安全模式修复_Outlook Com安全漏洞Microsoft无法修复
outlook安全模式修复 Microsoft is one of the biggest tech companies in the world, and yet their online emai ...
- BZOJ 3585: mex( 离线 + 线段树 )
离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...
- 构造 ---- 最小没出现过的数(逆向构造) D. Replace by MEX
题目链接 题目大意: 给你一个aaa序列长度为nnn,每次挑选一个位置pos∈[1,n]pos\in[1,n]pos∈[1,n],把apos=MEX(a)a_{pos}=MEX(a)apos=MEX ...
- [模板] 区间mex 区间元素种数
区间mex 问题 给定序列\({a_i}\), 每次询问给出\(l\), \(r\), 询问 \(\text{mex} \{a_i\}, i \in \{l, l+1, \cdots r\}\) 解法 ...
- 使用matlab进行mex编译时的路径问题mexopts
matlab和vs 进行混合编程时总须要使用matlab编译mexFunction.cpp文件. 这些文件免不了使用include下的*.h和lib下的*.lib文件.举例说明.这次我的cpp中用到了 ...
最新文章
- 【Python】Tkinter 体验
- Xfire方式开发和解析webservice
- c++ vlc读取摄像头_Qt音视频开发1-vlc解码播放
- python 两阶段聚类_挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法...
- 栈 php 验证格式,表单验证 - 《Biny - 高性能轻量级PHP框架》 - 书栈网 · BookStack...
- JavaScript 常用方法封装使用
- 利用python安装opencv_科学网—Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南 - 张重生的博文...
- [App Store Connect帮助]二、 添加、编辑和删除用户(5)创建一个沙盒测试员帐户...
- 四张照片合成一张怎么弄_教你5种照片创意手工,简单好看实用
- VUE router-view 页面布局 (嵌套路由+命名视图)
- WLAN无线漫游详解
- 3.1 电磁干扰EMI
- 来鑫干货解读:迅雷链到底有什么了不起?
- vue将文件流转成xlsx文件
- 【Linux】嵌入式Linux系统的移植(上篇:交叉编译器、连接方式)
- 做人要厚道--只针对富|士|康进行批判是掩耳盗铃的把戏-之一
- 考研C语言复习02(小甲鱼版本)
- Android与IOS的的兼容总结
- Linux磁盘管理 df、du、fdisk
- 理论:详解Linus的目录和文件管理