SunRaider, кушай с булочкой
| Код | // 329.cpp : Defines the entry point for the console application. //
#include <vector> #include <iostream> #include <list>
int main(int argc, char *argv[]) { //int ia[] = {1, 2, 1, 9, 5, 6, 2, 3, 4, 7, 2, 2, 3, 3, 3, 4, 8, 2, 9, 10, 15}; //int ia[] = {12, 14, 1, 3, 5, 7, 9, 9, 8}; //int ia[] = {3, 2, 7, 9, 12, 82, 99, 23, 11, 85, 24, 12, 8, 8, 11}; //int ia[] = {1, 2, 3, 4, 5, 6}; //int ia[] = {6, 5, 4, 3, 2, 1}; int ia[] = {1, 2, 3, 6, 5, 4, 3, 2, 1};
std::vector<int> vi(ia, ia + sizeof(ia) / sizeof(*ia)); std::cout << "Before: " << std::endl; int max_cnt = 15, cur_cnt = 1; for (std::vector<int>::const_iterator cit = vi.begin(); cit != vi.end(); ++cit, ++cur_cnt) { if (cur_cnt == max_cnt) { std::cout << *cit << std::endl; cur_cnt = 1; } else std::cout << *cit << ", "; } std::cout << std::endl; struct sequence { std::vector<int>::size_type beg; std::vector<int>::size_type size; }; std::vector<sequence> vs; sequence sqc; sqc.beg = 0; sqc.size = 1;
int max = vi.front(); for (std::vector<int>::size_type index = 1; index != vi.size(); ++index) { if (max <= vi[index]) { max = vi[index]; ++sqc.size;
if (index == vi.size() - 1) vs.push_back(sqc); } else { vs.push_back(sqc); max = vi[index]; sqc.size = 1; sqc.beg = index;
if (index == vi.size() - 1) vs.push_back(sqc); } }
std::vector<int>::size_type max_size = 0; std::vector<sequence>::const_iterator max_pos = vs.end(); for (std::vector<sequence>::const_iterator cit = vs.begin(); cit != vs.end(); ++cit) { //std::cout << cit->size << ": " << cit->beg << std::endl;
if (cit == vs.begin()) { max_pos = cit; max_size = cit->size; }
if (max_size < cit->size) { max_size = cit->size; max_pos = cit; } } int min = vi[max_pos->beg]; for (std::vector<int>::size_type index = max_pos->beg - 1; index != -1; --index) { if (vi[index] <= min) min = vi[index]; else vi[index] = 666; }
int max_n = vi[max_pos->beg + max_pos->size - 1]; for (std::vector<int>::size_type index = max_pos->beg + max_pos->size - 1; index != vi.size(); ++index) { if (vi[index] >= max_n) max_n = vi[index]; else vi[index] = 666; }
std::cout << "After: " << std::endl; cur_cnt = 1; for (std::vector<int>::const_iterator cit = vi.begin(); cit != vi.end(); ++cit) { if (cur_cnt == max_cnt) { if (*cit != 666) { std::cout << *cit << ", " << std::endl; cur_cnt = 1; } else { std::cout << std::endl; cur_cnt = 1; } } else if (*cit != 666) { std::cout << *cit << ", "; ++cur_cnt; } } std::cout << std::endl;
return 0; }
|
|