关于__int128
查看原帖
关于__int128
520544
Phrvth楼主2023/11/7 14:15

为什么我这份代码88pts,第三个样例啥都没输出

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef __int128 ill;

const ll MAXN = 4e7 + 7, Mod = (1 << 30) - 1;

ll n, type;

ll A[MAXN], S[MAXN], G[MAXN];

ll Q[MAXN];

ll B[MAXN], P[MAXN];

#define val(x) (2 * S[x] - S[G[x]])

ill read() {
	ill x = 0, f = 1; char s = getchar();
	while (s < '0' || s > '9') f |= s == '-1', s = getchar();
	while (s >= '0' && s <= '9') x = x * 10 + s - '0', s = getchar();
	return x * f;
}
void write(ill x) {
	if (x == 0) return ;
	write(x / 10); putchar(x % 10 + '0');
}

int main () {
	n = read(), type = read();
	if (type == 1) {
		ll x = read(), y = read(), z = read(), b1 = read(), b2 = read(), m = read();
		for (int i = 3; i <= n; i ++) B[i] = (x * B[i - 1] % Mod + y * B[i - 2] % Mod + z) % Mod;
		for (int i = 1; i <= m; i ++) {
			P[i] = read();
			ll l = read(), r = read();
			for (int j = P[i - 1] + 1, a; i <= P[i]; S[i] = S[i - 1] + a, i ++)
				a = B[i] % (r - l + 1) + l;
		}
	} else for (int i = 1, a; i <= n; S[i] = S[i - 1] + a, i ++) a = read();
	int hd = 1, tl = 1;
	for (int i = 1; i <= n; i ++) {
		while (hd < tl && val(Q[hd + 1]) <= S[i]) hd ++;
		G[i] = Q[hd]; 
		while (hd < tl && val(Q[tl]) >= val(i)) tl --; 
		Q[++ tl] = i;
	}
	ill ans = 0, tmp = 0;
	for (int i = n; i >= 1; i = G[i]) 
		tmp = S[i] - S[G[i]], tmp = tmp * tmp, ans = ans + tmp;
	write(ans);
	return 0;
}
2023/11/7 14:15
加载中...