菜鸡求教为什么会CE
查看原帖
菜鸡求教为什么会CE
35754
whiteqwq楼主2020/8/8 19:50

想用int128水过去,结果交上去疯狂CE(

#include<stdio.h>
const int maxn=40000005;
const long long mod=1073741824;
int i,j,k,m,n,hd,tl,xx,yy,zz;
int w[maxn],q[maxn],bb[maxn],pp[maxn],ll[maxn],rr[maxn];
__int128 f[maxn],sum[maxn],rec[maxn];
void write(__int128 x){
	if(x>9)
		write(x/(__int128)10);
	putchar(x%(__int128)10+48);
}
int main(){
	scanf("%d%d",&n,&k);
	if(k==1){
		scanf("%d%d%d%d%d%d",&xx,&yy,&zz,&bb[1],&bb[2],&m);
		for(i=3;i<=n;i++)
			bb[i]=(int)((1ll*xx*bb[i-1]+1ll*yy*bb[i-2]+1ll*zz)%mod);
		for(i=1;i<=m;i++){
			scanf("%d%d%d",&pp[i],&ll[i],&rr[i]);
			for(j=pp[i-1]+1;j<=pp[i];j++)
				w[j]=(bb[j]%(rr[i]-ll[i]+1))+ll[i]; 
		}
	}
	else for(i=1;i<=n;i++)
		scanf("%d",&w[i]);
	for(i=1;i<=n;i++)
		sum[i]=sum[i-1]+(__int128)w[i];
	hd=1,tl=0;
	for(i=1;i<=n;i++){
		while(hd<=tl&&sum[i]-sum[q[hd]]>=rec[q[hd]])
			hd++;
		rec[i]=sum[i]-sum[q[hd-1]],f[i]=f[q[hd-1]]+rec[i]*rec[i];
		while(hd<=tl&&rec[i]+sum[i]<=rec[q[tl]]+sum[q[tl]])
			tl--;
		q[++tl]=i;
	}
	write(f[n]);
	return 0;
}
2020/8/8 19:50
加载中...