ABC 272 E - Add and Mex(数学&mex)
Posted 酷酷的Herio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC 272 E - Add and Mex(数学&mex)相关的知识,希望对你有一定的参考价值。
ABC 272 E - Add and Mex(数学&mex)
显然 [ 0 , n ] [0,n] [0,n]的数才有意义。
对于 i = 1 i=1 i=1,显然有意义的数最多 n i \\dfracni in个。
求和一下最多 n log n n\\log n nlogn个有意义的数,考虑开 m m m个vector存每轮有意义的数。
然后暴力找即可,因为这些有意的数是不同的,所以暴力最多找一次 O ( n ) O(n) O(n)找满,然后后面都是 O ( 1 ) O(1) O(1)。
所以总复杂度; O ( n log n ) O(n\\log n) O(nlogn)
#include <bits/stdc++.h>
using namespace std;
int main()
int n, m;
cin >> n >> m;
vector<int> a(n);
for(auto &v : a) cin >> v;
vector<vector<int>> vals(m + 1);
for(int i = 0; i < n; i++)
if(a[i] >= n) continue;
int l = (a[i] >= 0 ? 1 : (-a[i] + i) / (i + 1));
int r = min(m + 1, (n - a[i] + i) / (i + 1));
for(int j = l; j < r; j++)
vals[j].push_back(a[i] + (i + 1) * j);
for(int i = 1; i <= m; i++)
int sz = vals[i].size();
vector<bool> exi(sz + 1);
for(auto v : vals[i])
if(v < sz) exi[v] = true;
int res = 0;
while(exi[res]) res++;
cout << res << endl;
以上是关于ABC 272 E - Add and Mex(数学&mex)的主要内容,如果未能解决你的问题,请参考以下文章
ABC 272 E - Add and Mex(数学&mex)
ABC222 E - Red and Blue Tree(思维+dp)
Codeforce842D Vitya and Strange Lesson