long long query_tree(int node, int left, int right, int u, int v) {
   lazy_update(node);
   if (u > right || v < left) return -1;
   if (u <= left && v >= right) return nodes[node];
   int mid = (left+right)/2;
   return max(query(2*node, left, mid, u, v), query(2*node+1, mid+1, right, u, v));
}
void update_tree(int node, int left, int right, int u, int v, long long val) {
   lazy_update(node);
   if (u > right || v < left) return;
   if (u <= left && v >= right) {
      nodes[node] += val;
      lazy[2*node] += val;
      lazy[2*node+1] += val;
      return;
   }
   int mid = (left+right)/2;
   update_tree(2*node, left, mid, u, v, val);
   update_tree(2*node+1, mid+1, right, u, v, val);
   nodes[node] = max(nodes[2*node], nodes[2*node+1]);
}
Ejemplo n.º 3
0
int quorum_query(BackendDB *bd) {
	int snap = bd->bd_quorum_cache;
	if (unlikely(snap == 0)) {
		assert(quorum_list != QR_POISON);

		lock();
		snap = bd->bd_quorum_cache;
		if (snap == 0) {
			snap = bd->bd_quorum ? lazy_update(bd->bd_quorum) : 1;
			assert(snap != 0);
			bd->bd_quorum_cache = snap;
		}
		unlock();
	}
	return snap > 0;
}