当前位置:网站首页>MEX有关的学习
MEX有关的学习
2022-07-06 07:35:00 【eva_can(not)survive】
MEX是一段区间内未出现的最小正整数。
所以向该区间加一个数只有加入该区间的mex值时才能增加;
我们来看两个题目
Problem - C - Codeforces
https://codeforces.com/contest/1699/problem/C首先我们可以思考一个区间【L,R】的mex是x,说明【0,x-1】肯定都出现过了,所以如果x的位置在该区间内部则可以在区间内任意一个未被使用的位置,如果不在该区间内就只能在那个位置不动了,因为x一旦动那么该序列的mex值肯定会受到影响。
int a[MAXN];
int pos[MAXN];
const int mod = 1e9 + 7;
void solve() {
int n;
ll ans = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
pos[a[i]] = i;
}
int mx = -INF, mn = INF;
for (int i = 0; i < n; i++) {
if (pos[i] > mn && pos[i] < mx) {
ans *= (mx - mn + 1 - i);
ans %= mod;
}
mn = min(mn, pos[i]);
mx = max(mx, pos[i]);
}
printf("%lld\n", ans);
}然后是这一题 需要求我们能得出得最大字典序序列,所以我们b序列中得到得元素肯定是能选到得最大得mex,所以我们可以维护一个前缀mex和后缀mex,当我们的前缀mex此时等于最大的mex时候就可以加入答案数组,然后直接从下一点开始把mex值替换成后缀mex的值
struct MEX {
int cot[MAXN];
vector<int> res;
int id = 0;
void add(int x) {
cot[x]++;
res.push_back(x);
}
int mex() {
while (cot[id])
id++;
return id;
}
void clear() {
for (int v : res) {
cot[v]--;
}
id = 0;
res.clear();
}
};
MEX now, t;
int a[MAXN];
int last[MAXN];
void solve() {
now.clear();
t.clear();
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
}
for (int i = n; i >= 1; i--) {
t.add(a[i]);
last[i] = t.mex();
}
vector<int> ans;
int mx = last[1];
for (int i = 1; i <= n; i++) {
now.add(a[i]);
if (mx == now.mex()) {
ans.push_back(mx);
mx = last[i + 1];
now.clear();
}
}
printf("%d\n", ans.size());
for (int v : ans) {
printf("%d ", v);
}
putchar('\n');
}
边栏推荐
- edge瀏覽器 路徑獲得
- Compliance and efficiency, accelerate the digital transformation of pharmaceutical enterprises, and create a new document resource center for pharmaceutical enterprises
- Three no resumes in the software testing industry. What does the enterprise use to recruit you? Shichendahai's resume
- TS 类型体操 之 extends,Equal,Alike 使用场景和实现对比
- 可变参数重载时的内存错误
- TS类型体操 之 字符串的妙用
- [online problem processing] how to kill the corresponding process when the MySQL table deadlock is caused by the code
- GET/POST/PUT/PATCH/DELETE含义
- navicat如何导入MySQL脚本
- js对象获取属性的方法(.和[]方式)
猜你喜欢
![Ble of Jerry [chapter]](/img/ce/127b597cdd238bb0c37326f5cf8265.png)
Ble of Jerry [chapter]

Opencv learning notes 9 -- background modeling + optical flow estimation

合规、高效,加快药企数字化转型,全新打造药企文档资源中心
![When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]](/img/3e/3d5bff87995b4a9fac093a6d9f9473.png)
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]

软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
Comparison of usage scenarios and implementations of extensions, equal, and like in TS type Gymnastics

TS 类型体操 之 循环中的键值判断,as 关键字使用

Opencv learning notes 8 -- answer sheet recognition

Multi attribute object detection on rare aircraft data sets: experimental process using yolov5

Oracle column to row -- a field is converted to multiple rows according to the specified separator
随机推荐
Pre knowledge reserve of TS type gymnastics to become an excellent TS gymnastics master
Simulation of Michelson interferometer based on MATLAB
【mysql学习笔记29】触发器
The way to learn go (II) basic types, variables and constants
Set picture annotation in markdown
Scala语言学习-08-抽象类
杰理之普通透传测试---做数传搭配 APP 通信【篇】
Typescript interface properties
[window] when the Microsoft Store is deleted locally, how to reinstall it in three steps
杰理之BLE【篇】
TypeScript void 基础类型
Word setting directory
Typescript void base type
OpenJudge NOI 2.1 1749:数字方格
Mise en œuvre du langage leecode - C - 15. Somme des trois chiffres - - - - - idées à améliorer
智能终端设备加密防护的意义和措施
Redis builds clusters
opencv学习笔记八--答题卡识别
1015 reversible primes (20 points) prime d-ary
Memory error during variable parameter overload
https://codeforces.com/contest/1629/problem/C