#include <iostream>
#include <vector>
template <typename InIt1, typename InIt2>
bool is_subsequence(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2)
{
if (first2 == last2) {
return false; // sub empty (should this return true?)
}
for (; first1 != last1; ++first1) {
if (*first1 == *first2) {
if (++first2 == last2) {
return true; // sub exhausted
}
}
}
return false; // seq exhausted
}
int main()
{
std::vector<int> a = { 1, 2, 3, 4 }, b = { 2, 4 }, c = { 4, 2 };
std::vector<int> d = { 3, 6, 3, 1, 2, 3 }, e = { 3, 1, 3 };
std::cout << is_subsequence(a.begin(), a.end(), b.begin(), b.end()) << '\n';
std::cout << is_subsequence(a.begin(), a.end(), c.begin(), c.end()) << '\n';
std::cout << is_subsequence(d.begin(), d.end(), e.begin(), e.end()) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIEluSXQxLCB0eXBlbmFtZSBJbkl0Mj4KYm9vbCBpc19zdWJzZXF1ZW5jZShJbkl0MSBmaXJzdDEsIEluSXQxIGxhc3QxLCBJbkl0MiBmaXJzdDIsIEluSXQyIGxhc3QyKQp7CiAgICBpZiAoZmlyc3QyID09IGxhc3QyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBzdWIgZW1wdHkgKHNob3VsZCB0aGlzIHJldHVybiB0cnVlPykKICAgIH0KICAgIGZvciAoOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxKSB7CiAgICAgICAgaWYgKCpmaXJzdDEgPT0gKmZpcnN0MikgewogICAgICAgICAgICBpZiAoKytmaXJzdDIgPT0gbGFzdDIpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBzdWIgZXhoYXVzdGVkCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7IC8vIHNlcSBleGhhdXN0ZWQKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGEgPSB7IDEsIDIsIDMsIDQgfSwgYiA9IHsgMiwgNCB9LCBjID0geyA0LCAyIH07CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGQgPSB7IDMsIDYsIDMsIDEsIDIsIDMgfSwgZSA9IHsgMywgMSwgMyB9OwoKICAgIHN0ZDo6Y291dCA8PCBpc19zdWJzZXF1ZW5jZShhLmJlZ2luKCksIGEuZW5kKCksIGIuYmVnaW4oKSwgYi5lbmQoKSkgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBpc19zdWJzZXF1ZW5jZShhLmJlZ2luKCksIGEuZW5kKCksIGMuYmVnaW4oKSwgYy5lbmQoKSkgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBpc19zdWJzZXF1ZW5jZShkLmJlZ2luKCksIGQuZW5kKCksIGUuYmVnaW4oKSwgZS5lbmQoKSkgPDwgJ1xuJzsKfQoK