题解
本题用形象一点的话来说就是对某个区间内所有的值进行修改,
并且 修改与查询的关系 是 多次修改加最后一次查询
由于 区间内修改的值的斜率一定 所以我们可以这样设
\(k[i]\) 的含义是点 \(i\) 比点 \(i-1\) 多了多少
对 \(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;
}
标签:cin,ll,必杀,long,P4231,修改,三步
From: https://www.cnblogs.com/pure4knowledge/p/18012576