Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <exception>
- template <class Int> void solve(const std::vector<Int>& vec) {
- using namespace std;
- size_t start{0}, mx_start{0};
- size_t finish{0}, mx_finish{0}; // included [0; size(vec)-1]
- size_t mx_sz{1};
- auto same_sign = [&vec](size_t cur_ind) -> bool {
- if (cur_ind == 0) throw runtime_error("Tried to acces vec[-1]");
- if (cur_ind == size(vec)) throw runtime_error("Tried to acces vec[size(vec)]");
- return (vec[cur_ind - 1] >= 0 && vec[cur_ind] >= 0) || (vec[cur_ind - 1] < 0 && vec[cur_ind] < 0);
- };
- for (size_t i{1}; i < size(vec); ++i) {
- if (same_sign(i)) {
- finish++;
- } else {
- size_t sz = 1 + finish - start;
- if (sz > mx_sz) {
- mx_sz = sz;
- mx_finish = finish;
- mx_start = start;
- }
- start = finish = i;
- sz = 1;
- }
- }
- mx_finish++;
- while (mx_start != mx_finish) {
- cout << vec[mx_start++] << ' ';
- }
- cout << '\n';
- }
- signed main(signed argc, char* argv[]) {
- using namespace std;
- size_t sz;
- cin >> sz;
- vector<int> vec(sz);
- for (auto& elem : vec) cin >> elem;
- solve(vec);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement