return 0;
}
+selects3 * lasts3=NULL;
+int lasti=0;
+int lasts=0;
int selects3_select(selects3 *select, int i) {
int d,x;
if (i == 0) return -1;
d = select->d;
-
- x = selectd2_select(select->sd1,i,1) - (i-1);
- x <<= d;
+ if(lasts3==select && lasti==i) {
+ while(!__getbit2(select->sd1->buf,++lasti));
+ }
+ else {
+ lasts = selectd2_select(select->sd1,i,1);
+ }
+ lasti = i;
+ lasts3 = select;
+ x = (lasts-(i-1)) << d;
x += __getbits(select->low,(i-1)*d,d);
return x;
-
}
int selects3_selectnext(selects3 *select, int i) {
+ return selects3_select(select,selects3_rank(select,i)+1);
int d,x,w,y;
int r,j;
int z,ii;