void solve( int lo, int hi ) {
  if( lo + 1 == hi ) {
    a[lo] = modpow2( a[lo] );
    return;
  }

  int mid = ( lo + hi ) >> 1;

  for( int i = lo; i < mid; ++i ) 
    a[mid + i - lo] += a[i];

  solve( lo, mid );
  solve( mid, hi );

  for( int i = lo; i < mid; ++i ) {
    a[mid + i - lo] -= a[i];
    if( a[mid + i - lo] < 0 ) a[mid + i - lo] += mod;
  }
}
示例#2
0
文件: cbuf.c 项目: danscu/lk
size_t cbuf_space_avail(cbuf_t *cbuf)
{
	uint consumed = modpow2((uint)(cbuf->head - cbuf->tail), cbuf->len_pow2);
	return valpow2(cbuf->len_pow2) - consumed - 1;
}
示例#3
0
static inline uint inc_pointer(const cbuf_t* cbuf, uint ptr, uint inc) {
    return modpow2(ptr + inc, cbuf->len_pow2);
}