求分析代码时间复杂度
查看原帖
求分析代码时间复杂度
574944
Micnation_AFO楼主2023/1/11 19:11

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)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);
}
2023/1/11 19:11
加载中...