1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #include <iostream>
#include <algorithm>
#include <functional>
#include <utility>
typedef std::pair<int*, int*> pii;
struct PredFind : public std::unary_function<int, bool>
{
bool operator()(int val) const
{
return val < 0;
}
};
bool PredMaxPair(pii const& pair1, pii const& pair2)
{
return (pair1.second - pair1.first) < (pair2.second - pair2.first);
}
int main()
{
int arr[] = {-1,-2,-3,0,9,-9,-6,-7,-7}, *p1 = 0, *p2 = 0, *pend = std::end(arr);
pii maxpair = std::make_pair(arr, arr), tmppair;
for(p1 = arr, p2 = arr; (p1 = std::find_if(p2, pend, PredFind())) != pend; )
{
p2 = std::find_if(p1, pend, std::not1(PredFind()));
tmppair = std::make_pair(p1, p2);
if(PredMaxPair(maxpair, tmppair))
maxpair = tmppair;
}
for(p1 = maxpair.first; p1 != maxpair.second; ++p1)
{
std::cout << *p1 << " ";
}
return 0;
} |