BitSequenceSDArray::BitSequenceSDArray(const BitString & bs) {
		uint * tmp_seq = new uint[uint_len(bs.getLength(),1)+1];
		ones = 0;
		for(uint i=0;i<uint_len(bs.getLength(),1)+1;i++)
			tmp_seq[i] = 0;
		for(uint i=0;i<bs.getLength();i++)
		if(bs[i]) {
			__setbit(tmp_seq,i,1);
			ones++;
		}
		if(ones)
			selects3_construct(&sd,bs.getLength(),tmp_seq);
		this->length = bs.getLength();
		delete [] tmp_seq;
	}
	BitSequenceSDArray::BitSequenceSDArray(uint * buff, size_t len) {
		uint * tmp_seq = new uint[uint_len(len,1)+1];
		ones = 0;
		for(uint i=0;i<uint_len(len,1)+1;i++)
			tmp_seq[i] = 0;
		for(uint i=0;i<len;i++)
		if(bitget(buff,i)) {
			__setbit(tmp_seq,i,1);
			ones++;
		}
		if(ones)
			selects3_construct(&sd,len,tmp_seq);
		this->length = len;
		delete [] tmp_seq;
	}
static_bitsequence_sdarray::static_bitsequence_sdarray(uint * buff, uint len) {
  uint * tmp_seq = new uint[uint_len(len,1)+1];
  ones = 0;
  for(uint i=0;i<uint_len(len,1)+1;i++)
    tmp_seq[i] = 0;
  for(uint i=0;i<len;i++)
  if(bitget(buff,i)) {
    __setbit(tmp_seq,i,1);
    ones++;
  }
  if(ones)
    selects3_construct(&sd,len,tmp_seq);
  this->len = len;
	//sd.lasti=(uint)-3;
  //this->ones = sd.m;
  delete [] tmp_seq;
}