#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
void reverse(int * from, int * to) {
while ((to - from) > 1) {
--to;
int temp = *from;
*from = *to;
*to = temp;
++from;
}
}
int const * find(int const * from,
int const * const to,
int const value) {
while ((from != to) && (*from != value)) {
++from;
}
return from;
}
void reverse_until (int * const from,
int * const to,
int const sentinel) {
int const * const position_sentinel = find(from, to, sentinel);
reverse(from, from + (position_sentinel - from));
}
int main() {
int test[10];
for (size_t i = 0; i < 10; ++i) {
test [i] = i + 1;
}
reverse_until (test, test + 10, 6);
copy(test, test + 10, ostream_iterator<int>{cout, " "});
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdm9pZCByZXZlcnNlKGludCAqIGZyb20sIGludCAqIHRvKSB7CiAgd2hpbGUgKCh0byAtIGZyb20pID4gMSkgewogICAgLS10bzsKICAgIGludCB0ZW1wID0gKmZyb207CiAgICAqZnJvbSA9ICp0bzsKICAgICp0byA9IHRlbXA7CiAgICArK2Zyb207CiAgfQp9CgppbnQgY29uc3QgKiBmaW5kKGludCBjb25zdCAqIGZyb20sCiAgICAgICAgICAgICAgICAgaW50IGNvbnN0ICogY29uc3QgdG8sCiAgICAgICAgICAgICAgICAgaW50IGNvbnN0IHZhbHVlKSB7CiAgd2hpbGUgKChmcm9tICE9IHRvKSAmJiAoKmZyb20gIT0gdmFsdWUpKSB7CiAgICArK2Zyb207CiAgfQogIHJldHVybiBmcm9tOwp9Cgp2b2lkIHJldmVyc2VfdW50aWwgKGludCAqIGNvbnN0IGZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBjb25zdCB0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25zdCBzZW50aW5lbCkgewogIGludCBjb25zdCAqIGNvbnN0IHBvc2l0aW9uX3NlbnRpbmVsID0gZmluZChmcm9tLCB0bywgc2VudGluZWwpOwogIHJldmVyc2UoZnJvbSwgZnJvbSArIChwb3NpdGlvbl9zZW50aW5lbCAtIGZyb20pKTsKfQoKCmludCBtYWluKCkgewogIGludCB0ZXN0WzEwXTsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwOyArK2kpIHsKICAgIHRlc3QgW2ldID0gaSArIDE7CiAgfQogIHJldmVyc2VfdW50aWwgKHRlc3QsIHRlc3QgKyAxMCwgNik7CiAgY29weSh0ZXN0LCB0ZXN0ICsgMTAsIG9zdHJlYW1faXRlcmF0b3I8aW50Pntjb3V0LCAiICJ9KTsKICByZXR1cm4gMDsKfQ==