【Luogu】P4231三步必杀(差分,差分)
郑重宣布我以后真的再也不会信样例了,三种写法都能过
另:谁评的蓝题难度qwq 蓝题有这么恐怖吗
两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案
看题解之后……第二次差分写跪,我脑子怕不是炸了
#include<cstdio> #include<cctype> #include<cstring> #include<cstdlib> #include<algorithm> #define maxn 10000020 using namespace std; inline long long read(){ long long num=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-') f=-1; ch=getchar(); } while(isdigit(ch)){ num=num*10+ch-'0'; ch=getchar(); } return num*f; } long long xum; long long sum[maxn]; long long tag[maxn]; long long mxn; int main(){ int n=read(),m=read(); for(int i=1;i<=m;++i){ long long l=read(),r=read(),s=read(),e=read(); long long d=(e-s)/(r-l); sum[l]+=s;sum[r+1]-=e; tag[l+1]+=d; tag[r+1]-=d; } for(int i=1;i<=n;++i){ tag[i]+=tag[i-1]; sum[i]+=sum[i-1]+tag[i]; xum^=sum[i]; mxn=max(mxn,sum[i]); } printf("%lld %lld\n",xum,mxn); return 0; }