Blocking skills

Optimization of the tree block array operations.

$ O (1) $ modifying single point, $ O (\ sqrt {n}) $ query interval.

const int N = 1e6+10, S = 400;
int s1[N], s2[N];
void add(int x, int v) {
	s1[x] += v;
	s2[x/S] += v;
}
int qry(int x) {
	int ans = 0;
	for (int i=x/S*S; i<=x; ++i) ans+=s1[i];
	for (int i=x/S-1; i>=0; --i) ans+=s2[i];
	return ans;
}

$ O (1) $ à query, $ O (\ sqrt {n}) $ interval modification.

void add(int x, int v) {
	for (int i=x/S*S; i<=x; ++i) s1[i]+=v;
	for (int i=x/S-1; i>=0; --i) s2[i]+=v;
}
int qry(int x) {
	return s1[x]+s2[x/S];
}

 

Guess you like

Origin www.cnblogs.com/uid001/p/11261088.html