classSolution{public:intoddEvenJumps(vector<int>&A){constintn=A.size();map<int,int>map;// {num: min index}vector<bool>inc(n);// inc[i] := can reach A[n - 1] from i w/ inc jumpvector<bool>dec(n);// dec[i] := can reach A[n - 1] from i w/ dec jumpmap[A[n-1]]=n-1;inc.back()=true;dec.back()=true;for(inti=n-2;i>=0;--i){constautolo=map.lower_bound(A[i]);// Min val >= A[i]constautohi=map.upper_bound(A[i]);// Min val > A[i]if(lo!=cend(map))inc[i]=dec[lo->second];if(hi!=cbegin(map))dec[i]=inc[prev(hi)->second];map[A[i]]=i;}returncount(begin(inc),end(inc),true);}};
classSolution{publicintoddEvenJumps(int[]A){finalintn=A.length;TreeMap<Integer,Integer>map=newTreeMap<>();// {num: min index}int[]inc=newint[n];// inc[i] := can reach A[n - 1] from i w/ inc jumpint[]dec=newint[n];// dec[i] := can reach A[n - 1] from i w/ dec jumpmap.put(A[n-1],n-1);inc[n-1]=1;dec[n-1]=1;for(inti=n-2;i>=0;--i){Map.Entry<Integer,Integer>lo=map.ceilingEntry(A[i]);// Min val >= A[i]Map.Entry<Integer,Integer>hi=map.floorEntry(A[i]);// Max val <= A[i]if(lo!=null)inc[i]=dec[(int)lo.getValue()];if(hi!=null)dec[i]=inc[(int)hi.getValue()];map.put(A[i],i);}returnArrays.stream(inc).sum();}}