rt,求调88pts,数组开大后还CE了,求说说该怎么改
另外我这个type=1的读入好像也有点问题,而且调了好久都看不出来,破防
拜谢大佬
#include<bits/stdc++.h>
#define int long long
#define ll long long
using namespace std;
const int N=4e7+10;
const int P=1ll<<30;
int n,typ;
int a[N],b[N],sum[N];
__int128 f[N],last[N];
int q[N];
void write(__int128 x){
if(x>9) write(x/10);
putchar(x%10+'0');
}
signed main(){
scanf("%lld%lld",&n,&typ);
if(!typ){
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];
}
else{
int x,y,z,m,l,r,p,last=0;
scanf("%lld%lld%lld%lld%lld%lld",&x,&y,&z,&b[1],&b[2],&m);
for(int i=3;i<=n;i++) b[i]=(x*b[i-1]%P+y*b[i-2]%P+z%P)%P;
for(int j=1;j<=m;j++){
scanf("%lld%lld%lld",&p,&l,&r);
for(int i=last+1;i<=p;i++) a[i]=(b[i]%(r-l+1))+l,sum[i]=sum[i-1]+a[i];
last=p;
}
}
int hh=0,tt=0;
for(int i=1;i<=n;i++){
while(hh<tt&&last[q[hh+1]]+sum[q[hh+1]]<=sum[i]) hh++;
last[i]=sum[i]-sum[q[hh]];
f[i]=f[q[hh]]+last[i]*last[i];
while(hh<tt&&last[q[tt]]+sum[q[tt]]>=last[i]+sum[i]) tt--;
q[++tt]=i;
// for(int j=0;j<i;j++)
// if(last[j]<=sum[i]-sum[j]) f[i]=f[j]+(sum[i]-sum[j])*(sum[i]-sum[j]),last[i]=sum[i]-sum[j];
}
write(f[n]);
return 0;
}