#include <iostream>
#include <vector>
int find_missing(std::vector<int>& v)
{
for (std::size_t i = 0; i != v.size(); ++i) {
std::size_t e = i;
while (0 < v[e]
&& std::size_t(v[e]) <= v.size()
&& std::size_t(v[e]) != e + 1
&& v[e] != v[v[e] - 1]
) {
std::swap(v[e], v[v[e] - 1]);
}
}
for (std::size_t i = 0; i != v.size(); ++i) {
if (std::size_t(v[i]) != i + 1) {
return i + 1;
}
}
return v.size();
}
int main()
{
std::vector<int> v = {3, 4, -1, 1};
std::cout << find_missing(v) << std::endl;
v = {1, 2, 0};
std::cout << find_missing(v) << std::endl;
v = {2, 2, 2};
std::cout << find_missing(v) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IGZpbmRfbWlzc2luZyhzdGQ6OnZlY3RvcjxpbnQ+JiB2KQp7CiAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHYuc2l6ZSgpOyArK2kpIHsKICAgICAgICAKICAgICAgICBzdGQ6OnNpemVfdCBlID0gaTsKICAgICAgICAKICAgICAgICB3aGlsZSAoMCA8IHZbZV0KICAgICAgICAgICAgJiYgc3RkOjpzaXplX3QodltlXSkgPD0gdi5zaXplKCkKICAgICAgICAgICAgJiYgc3RkOjpzaXplX3QodltlXSkgIT0gZSArIDEKICAgICAgICAgICAgJiYgdltlXSAhPSB2W3ZbZV0gLSAxXQogICAgICAgICkgewogICAgICAgICAgICBzdGQ6OnN3YXAodltlXSwgdlt2W2VdIC0gMV0pOwogICAgICAgIH0KICAgIH0KICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgIT0gdi5zaXplKCk7ICsraSkgewogICAgICAgIGlmIChzdGQ6OnNpemVfdCh2W2ldKSAhPSBpICsgMSkgewogICAgICAgICAgICByZXR1cm4gaSArIDE7ICAgCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHYuc2l6ZSgpOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPGludD4gdiA9IHszLCA0LCAtMSwgMX07CiAgICBzdGQ6OmNvdXQgPDwgZmluZF9taXNzaW5nKHYpIDw8IHN0ZDo6ZW5kbDsKICAgIHYgPSB7MSwgMiwgMH07CiAgICBzdGQ6OmNvdXQgPDwgZmluZF9taXNzaW5nKHYpIDw8IHN0ZDo6ZW5kbDsKICAgIHYgPSB7MiwgMiwgMn07CiAgICBzdGQ6OmNvdXQgPDwgZmluZF9taXNzaW5nKHYpIDw8IHN0ZDo6ZW5kbDsKfQo=