编译错误求调
查看原帖
编译错误求调
463210
zzzYheng楼主2022/2/25 22:13
#include <bits/stdc++.h>

#define int long long

using namespace std; 

const int Maxn = 4e7 + 10; 
const int Maxm = 1e5 + 10; 

int n, opt; 
int a[Maxn], b[Maxn]; 

int p[Maxm], L[Maxm], R[Maxm]; 

int sum[Maxn];  
//__int128 f[Maxn]; 
int g[Maxn]; 

int pre[Maxn]; 

int q[Maxn];
int l, r; 

int s[Maxn], top; 

void write(__int128 x) {
	if (x >= 10) write(x / 10); 
	putchar(x % 10 + '0'); 
}

signed main() {
	int i, j; 
	scanf("%lld %lld", &n, &opt); 
	if (opt == 0) {
		for (i = 1; i <= n; ++i) {
			scanf("%lld", a + i); 
			sum[i] = sum[i - 1] + a[i]; 
		}
	}
	else {
		int x, y, z, m; 
		scanf("%lld %lld %lld %lld %lld %lld", &x, &y, &z, b + 1, b + 2, &m); 
		for (i = 1; i <= m; ++i) {
			scanf("%lld %lld %lld", p + i, L + i, R + i); 
		}
		for (i = 3; i <= n; ++i) {
			b[i] = (x * b[i - 1] % (1ll << 30) + y * b[i - 2] % (1ll << 30) + z) % (1ll << 30);  
		}
		for (i = 1; i <= m; ++i) {
			for (j = p[i - 1] + 1; j <= p[i]; ++j) {
				a[j] = (b[j] % (R[i] - L[i] + 1)) + L[i]; 
				sum[j] = sum[j - 1] + a[j]; 
//				printf("%lld %lld\n", j, sum[j]); 
			}
		}
	}
//	memset(f, 0x3f, sizeof(f)); 
//	f[0] = 0; 
	l = r = 1; 
	q[1] = 0; 
//	pre[++cnt] = 0; 
	for (i = 1; i <= n; ++i) {
		while (l < r && sum[i] >= g[q[l + 1]] + sum[q[l + 1]]) ++l; 
//		f[i] = f[q[l]] + ((__int128)sum[i] - sum[q[l]]) * (sum[i] - sum[q[l]]); 
		pre[i] = q[l]; 
		g[i] = sum[i] - sum[q[l]]; 
		while (l <= r && g[q[r]] + sum[q[r]] >= g[i] + sum[i]) --r; 
		q[++r] = i; 
//		printf("%lld ", i); 
//		write(f[i]); 
//		puts(""); 
	}
//	write(f[n]);  
	int now = n; 
	while (1) {
		s[++top] = now; 
		if (now == 0) break; 
		now = pre[now]; 
	}
	__int128 ans = 0; 
	while (top) {
		ans = ans + ((__int128)sum[s[top]] - sum[s[top + 1]]) * (sum[s[top]] - sum[s[top + 1]]); 
		--top; 
	}
	write(ans); 
	return 0; 
}

没脸见人了,编译错误调不出来。。。

应该是数组的问题,把Maxn改成1e7就能通过编译。

2022/2/25 22:13
加载中...