洛谷 P4231 三步必杀(差分×2)

 

 

等差数列,用差分不用想

差分数组 d 维护当前数值与前一数值的差值,两遍前缀和即可 

题目样例给的公差与首相是相同的,但是大部分情况是不同的,在尾项应直接减去本次操作所带来的所有影响

const int N=1e7+5;

    int i,j,k;
    int n,m;
    ll d[N];

int main()
{
    //IOS;
    while(~sdd(n,m)){
        int l,r,s,e;
        for(int i=1;i<=m;i++){
            sdd(l,r); sdd(s,e);
            ll cur=(e-s)/(r-l); //公差
            d[l]+=s;
            d[l+1]+=(cur-s);
            d[r+1]-=(e+cur);
            d[r+2]+=e;
        }
        ll ans=0,maxx=0,res=0,sum=0;
        for(int i=1;i<=n;i++){
            res+=d[i];
            sum+=res;
            ans^=sum;
            maxx=max(maxx,sum);
        }
        printf("%lld %lld\n",ans,maxx);
    }
    //PAUSE;
    return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页