P4231 三步必杀

原题链接

题解

本题用形象一点的话来说就是对某个区间内所有的值进行修改,
并且 修改与查询的关系 是 多次修改加最后一次查询
由于 区间内修改的值的斜率一定 所以我们可以这样设
k[i] 的含义是点 i 比点 i1 多了多少
k[i] 进行加减操作的含义是 代表点 i 以后的所有的 k 都加或减同一个数

Code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll sum=0;
ll k[10000005]={0};
int main()
{
    ios::sync_with_stdio(false);
    ll n,t;
    cin>>n>>t;
    while(t--)
    {
        ll l,r,s,e;
        cin>>l>>r>>s>>e;
        ll d=(e-s)/(r-l);
        k[l]+=s;
        k[l+1]-=s;
        k[l+1]+=d;
        k[r+1]-=d;
        k[r+1]-=e;
        k[r+2]+=e;
    }

    ll ans1=0,ans2=0;
    for(ll i=1;i<=n;i++)
    {
        k[i]+=k[i-1];
        sum+=k[i];
        ans1^=sum;
        ans2=max(ans2,sum);
    }

    cout<<ans1<<" "<<ans2;
    return 0;
}

posted @   纯粹的  阅读(21)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示