1 template<class U,class T>
2 bool fn(U vi1,U vi2,const T&i)
3 {
4 U vi3=vi2-1;
5 if(vi1>vi3)
6 return 0;
7 else
8 {
9 U vi=vi1+(vi3-vi1)/2;
10 if(*vi==i)
11 return 1;
12 else if(*vi>i)
13 return fn(vi1,vi,i);
14 else
15 return fn(vi+1,vi2,i);
16 }
17
18
19 }
20
21
22
23 template<class U,class T,class P>
24 bool fnn(U vi1,U vi2,const T&i,P p)
25 {
26 U vi3=vi2-1;
27 if(vi1>vi3)
28 return 0;
29 else
30 {
31 U vi=vi1+(vi3-vi1)/2;
32 if(!p(*vi,i))
33 fnn(vi1,vi,i,p)
34 else if(!p(i,*vi))
35 return fnn(vi+1,vi2,i,p);
36 else
37 return 1;
38 }
39
40
41 }