27 void execute(F1&& add_left, F2&& add_right, F3&& del_left, F4&& del_right, F5&& out) {
28 vector<
int> qi(q); iota(qi.begin(),qi.end(),0);
31 const int wid=max<
int>(1,1.0*n/max<
double>(1.0,sqrt(q*2.0/3.0)));
32 sort(qi.begin(),qi.end(),[&](
int a,
int b) {
33 if(ls[a]/wid!=ls[b]/wid)
return ls[a]<ls[b];
34 if((ls[a]/wid)&1)
return rs[a]<rs[b];
40 while(nl>ls[i]) add_left(--nl);
41 while(nr<rs[i]) add_right(nr++);
42 while(nl<ls[i]) del_left(nl++);
43 while(nr>rs[i]) del_right(--nr);