rt,TLE on #8
感觉是这一段出了问题:
int res = 0;
void ask(int p, int l, int r, int val) {
if (res >= 2) return;
if (!(t[p].dat % val)) return;
if (t[p].l == t[p].r) {
res++;
return;
}
int mid = (t[p].l + t[p].r) >> 1;
if (l <= mid && t[p << 1].dat % val) ask(p << 1, l, r, val);
if (r > mid && t[(p << 1) | 1].dat % val) ask((p << 1) | 1, l, r, val);
}
想问一下这个函数的复杂度是多少?lz 感觉是 O(n)的,但是看了一眼题解好像和第一篇的询问操作复杂度差不多,第一篇题解的代码:
void query(int x,int y,int rt,int l,int r,int d) {
if(cnt>1) return;
if(l==r) {
++cnt;
return;
}
int mid=(l+r)>>1;
if(x<=mid&&seg[lson]%d) query(x,y,lson,l,mid,d);
if(mid<y&&seg[rson]%d) query(x,y,rson,mid+1,r,d);
}