当前位置:网站首页>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');
}
边栏推荐
- Opencv learning notes 9 -- background modeling + optical flow estimation
- Compliance and efficiency, accelerate the digital transformation of pharmaceutical enterprises, and create a new document resource center for pharmaceutical enterprises
- 可变参数重载时的内存错误
- word中把帶有某個符號的行全部選中,更改為標題
- 洛谷P4127 [AHOI2009]同类分布 题解
- leecode-C语言实现-15. 三数之和------思路待改进版
- C # connect to SQLite database to read content
- Seriously recommend several machine learning official account
- OpenJudge NOI 2.1 1661:Bomb Game
- Basics of reptile - Scratch reptile
猜你喜欢

How Navicat imports MySQL scripts

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

杰理之BLE【篇】

数字IC设计笔试题汇总(一)
![[MySQL learning notes 32] mvcc](/img/0d/2df82b63d1eb3283a84e27f67c1523.png)
[MySQL learning notes 32] mvcc

【MySQL学习笔记32】mvcc

How to delete all the words before or after a symbol in word

Go learning -- implementing generics based on reflection and empty interfaces

Opencv learning notes 8 -- answer sheet recognition

Apache middleware vulnerability recurrence
随机推荐
Ble of Jerry [chapter]
杰理之AD 系列 MIDI 功能说明【篇】
Generator Foundation
datax自检报错 /datax/plugin/reader/._drdsreader/plugin.json]不存在
剪映的相关介绍
数字IC设计笔试题汇总(一)
学go之路(一)go的基本介绍到第一个helloworld
合规、高效,加快药企数字化转型,全新打造药企文档资源中心
Memory error during variable parameter overload
杰理之BLE【篇】
成为优秀的TS体操高手 之 TS 类型体操前置知识储备
洛谷P4127 [AHOI2009]同类分布 题解
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
Get/post/put/patch/delete meaning
可变参数重载时的内存错误
Detailed explanation | detailed explanation of internal mechanism of industrial robot
[computer skills]
TS类型体操 之 字符串的妙用
TypeScript void 基础类型
Word setting directory
https://codeforces.com/contest/1629/problem/C