#include <iostream>
#include <iterator>
//пересечение упорядоченных массивов
int* array_intersect(const int* f1, const int* l1,
const int* f2, const int* l2, int* dst){
while((f1 != l1) && (f2 != l2)){
if(*f1 < *f2)
++f1;
else {
if(*f1 == *f2)
*dst++ = *f1++;
++f2;
}
}
return dst;
}
//объединение упорядоченных массивов
int* array_union(const int* f1, const int* l1,
const int* f2, const int* l2, int* dst){
while((f1 != l1) && (f2 != l2)){
if(*f1 < *f2)
*dst++ = *f1++;
else {
if(*f1 == *f2)
++f1;
*dst++ = *f2++;
}
}
while(f1 != l1)
*dst++ = *f1++;
while(f2 != l2)
*dst++ = *f2++;
return dst;
}
int main(void){
int a[] = { 0, 1, 3, 5, 6, 7, 8, 9, 10, 50 };
int b[] = { 0, 1, 2, 3, 4, 7, 8, 9, 50 };
int c[sizeof(a)/sizeof(a[0]) + sizeof(b)/sizeof(b[0])];
int* e = array_intersect(a, a + sizeof(a)/sizeof(a[0]),
b, b + sizeof(b)/sizeof(b[0]), c);
std::copy(c, e, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
e = array_union(a, a + sizeof(a)/sizeof(a[0]),
b, b + sizeof(b)/sizeof(b[0]), c);
std::copy(c, e, std::ostream_iterator<int>(std::cout, " "));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CgovL9C/0LXRgNC10YHQtdGH0LXQvdC40LUg0YPQv9C+0YDRj9C00L7Rh9C10L3QvdGL0YUg0LzQsNGB0YHQuNCy0L7QsgppbnQqIGFycmF5X2ludGVyc2VjdChjb25zdCBpbnQqIGYxLCBjb25zdCBpbnQqIGwxLCAKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBmMiwgY29uc3QgaW50KiBsMiwgaW50KiBkc3QpewoJd2hpbGUoKGYxICE9IGwxKSAmJiAoZjIgIT0gbDIpKXsKCQlpZigqZjEgPCAqZjIpCgkJCSsrZjE7CgkJZWxzZSB7CgkJCWlmKCpmMSA9PSAqZjIpCgkJCQkqZHN0KysgPSAqZjErKzsKCQkJKytmMjsKCQl9CQoJfQoJcmV0dXJuIGRzdDsKfQoKLy/QvtCx0YrQtdC00LjQvdC10L3QuNC1INGD0L/QvtGA0Y/QtNC+0YfQtdC90L3Ri9GFINC80LDRgdGB0LjQstC+0LIKaW50KiBhcnJheV91bmlvbihjb25zdCBpbnQqIGYxLCBjb25zdCBpbnQqIGwxLCAKICAgICAgICAgICAgICAgICBjb25zdCBpbnQqIGYyLCBjb25zdCBpbnQqIGwyLCBpbnQqIGRzdCl7Cgl3aGlsZSgoZjEgIT0gbDEpICYmIChmMiAhPSBsMikpewoJCWlmKCpmMSA8ICpmMikKCQkJKmRzdCsrID0gKmYxKys7CgkJZWxzZSB7CgkJCWlmKCpmMSA9PSAqZjIpCgkJCQkrK2YxOwoJCQkqZHN0KysgPSAqZjIrKzsKCQl9CQoJfQoKCXdoaWxlKGYxICE9IGwxKQoJCSpkc3QrKyA9ICpmMSsrOwoJd2hpbGUoZjIgIT0gbDIpCgkJKmRzdCsrID0gKmYyKys7CglyZXR1cm4gZHN0Owp9CgppbnQgbWFpbih2b2lkKXsKCWludCBhW10gPSB7IDAsIDEsIDMsIDUsIDYsIDcsIDgsIDksIDEwLCA1MCB9OwoJaW50IGJbXSA9IHsgMCwgMSwgMiwgMywgNCwgNywgOCwgOSwgNTAgfTsKCWludCBjW3NpemVvZihhKS9zaXplb2YoYVswXSkgKyBzaXplb2YoYikvc2l6ZW9mKGJbMF0pXTsKCglpbnQqIGUgPSBhcnJheV9pbnRlcnNlY3QoYSwgYSArIHNpemVvZihhKS9zaXplb2YoYVswXSksIAoJICAgICAgICAgICAgICAgICAgICAgICAgIGIsIGIgKyBzaXplb2YoYikvc2l6ZW9mKGJbMF0pLCBjKTsKCXN0ZDo6Y29weShjLCBlLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCgllID0gYXJyYXlfdW5pb24oYSwgYSArIHNpemVvZihhKS9zaXplb2YoYVswXSksIAoJICAgICAgICAgICAgICAgIGIsIGIgKyBzaXplb2YoYikvc2l6ZW9mKGJbMF0pLCBjKTsKCXN0ZDo6Y29weShjLCBlLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwoJcmV0dXJuIDA7Cn0=