Пример #1
0
 ll queryRange(int x, int l, int r, int ql, int qr) {
     resolve(x, l, r);
     if(l >= ql && r <= qr) return T[x].sum;
     ll ret = 0;
     int m = (l + r) >> 1;
     if(ql <= m) ret += queryRange(l(x), l, m, ql, qr);      // For max() change these two lines
     if(qr > m) ret += queryRange(r(x), m + 1, r, ql, qr);
     return ret;
 }
Int queryRange(int node, int start, int end, int l, int r) {
    if (end < l || r < start)
        return 0;
    if (lazy[node] != 0) {
        tree[node] += (end-start+1)*lazy[node];
        if (start != end) {
            lazy[2*node] += lazy[node];
            lazy[2*node+1] += lazy[node];
        }
        lazy[node] = 0;
    }

    if (l <= start && end <= r)
        return tree[node];
    Int mid = (start + end)/2;
    return queryRange(2*node, start, mid, l, r) + queryRange(2*node+1, mid+1, end, l, r);
}
Пример #3
0
static double timePass(int pass, struct sqlConnection *conn, char *table,
                       int size, struct chromSize *chroms)
/* one time pass for the given size */
{
struct chromRange *ranges = buildRanges(size, chroms);
long startTime = clock1000();
struct chromRange *range;
for (range = ranges; range != NULL; range = range->next)
    queryRange(conn, table, range);

double elapsed = ((double)(clock1000()-startTime))/1000.0;
printf("pass: %d  range size: %d  ranges: %d  time: %g seconds\n", pass, size,
       slCount(ranges), elapsed);
slFreeList(&ranges);
sqlUpdate(conn, NOSQLINJ "flush tables");
return elapsed;
}
int main() {

    // get input
    Int n, m, k;
    scanf("%lld%lld%lld", &n, &m, &k);
    for (Int i=1; i<=n; i++) {
        scanf("%lld", &num[i]);
    }
    build(1, 1, n);
    Int a, b, c, d;
    for (Int i=0; i<m+k; i++) {
        scanf("%lld%lld%lld", &a, &b, &c);
        if (a==1) {
            scanf("%lld", &d);
            updateRange(1,1,n,b,c,d);
        } else {
            printf("%lld\n", queryRange(1,1,n,b,c));
        }
    }

    return 0;
}
Пример #5
0
 ll query(int ql, int qr) {
     return queryRange(0, 0, n - 1, ql, qr);
 }
Пример #6
0
void QTree::queryCircle(const double cx, const double cy, const double range, std::vector<Point*>& res)
{
	queryRange(BoundingBox(Point(cx, cy), Point(range, range)), res, 2);
	return;
}