一个疑惑

P2801 教主的魔法

diqiuyi @ 2022-07-23 23:21:05

这是 AC 代码片段

inline void Add(int l,int r,int w){
    for(int i=l;i<=min(r,bl[l]*block);i++)
        a[i]+=w;
    for(int i=(bl[l]-1)*block+1;i<=min(n,bl[l]*block);i++)
        b[i]=a[i];
    sort(b+(bl[l]-1)*block+1,b+min(n,bl[l]*block)+1);
    if(bl[l]^bl[r]){
        for(int i=(bl[r]-1)*block+1;i<=r;i++)
            a[i]+=w;
        for(int i=(bl[r]-1)*block+1;i<=min(n,bl[r]*block);i++)
            b[i]=a[i];
        sort(b+(bl[r]-1)*block+1,b+min(n,bl[r]*block)+1);
    }
    for(int i=bl[l]+1;i<bl[r];i++)
        ad[i]+=w;
}

但是如果改成这样的话,就会 WA on #9

inline void Add(int l,int r,int w){
    for(int i=l;i<=min(r,bl[l]*block);i++)
        a[i]+=w;
    for(int i=l;i<=min(n,bl[l]*block);i++)//注意看这里
        b[i]=a[i];
    sort(b+l+1,b+min(n,bl[l]*block)+1);//和这里
    if(bl[l]^bl[r]){
        for(int i=(bl[r]-1)*block+1;i<=r;i++)
            a[i]+=w;
        for(int i=(bl[r]-1)*block+1;i<=min(n,bl[r]*block);i++)
            b[i]=a[i];
        sort(b+(bl[r]-1)*block+1,b+min(n,bl[r]*block)+1);
    }
    for(int i=bl[l]+1;i<bl[r];i++)
        ad[i]+=w;
}

个人觉得下面的写法没有问题,哪位大神能解释一下为什么


by diqiuyi @ 2023-02-20 19:23:40

啊wssb


|