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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include<vector>
#include<iterator>
#include<iostream>
using namespace std;
class pred{ //deciding functor
static int decide;
public:
bool operator()(int lhs, int rhs){
int diff(rhs-lhs);
if(decide == 0){
switch(diff){
case(1):
decide = 1;
return true;
case(-1):
decide =-1;
return true;
}
decide = 0;
return false;
}
if((rhs-lhs) == decide)
return false;
else{
decide = 0;
return true;
}
}
};
//--------------------------------------------------------------------------------------------
int pred::decide = 0;
int main()
{
int seq[]={1,2,3,5,6,7,8,6,5,4,3,4,4,3,2,1,0,1};
vector<int> veci(seq, seq+sizeof(seq)/sizeof(int));
typedef vector<int>::iterator VII;
VII first = veci.begin();
VII last = veci.end();
pred p;
int longest(0);
while( first != last ){
first = adjacent_find(first, last, p);
VII lastInSeq = adjacent_find(first, last, p);
int len = distance(first, lastInSeq)+1;
if(len > longest) longest = len;
first = lastInSeq;
}
return 0;
}
|