啊??为什么改了一下会WA
查看原帖
啊??为什么改了一下会WA
743373
Vitamin_B楼主2024/6/26 20:21

AC代码:https://www.luogu.com.cn/record/163125109

//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

# include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

int n, m, l, r;

ll tr[2000005], tree[2000005], k, a[500005];

char op;

void add (int x, ll y) {

	while (x <= n)
		tree[x] += y, x += x & -x;

	return ;

}

ll find (int x) {

	ll sum = 0;

	while (x)
		sum += tree[x], x ^= x & -x;

	return sum;

}

void build (int x, int l, int r) {

	if (l == r) {

		add (l, a[r] - a[l - 1]);

		return ;

	}

	int mid = l + r >> 1, left = x << 1, right = left | 1;

	build (left, l, mid), build (right, mid + 1, r);

	tr[x] = __gcd (__gcd (tr[left], tr[right]), abs (find (mid + 1) - find (mid)));

	return ;

}

void change (int x, int l, int r, int L, int R) {

	if (l == L && r == R) {

		add (l, k), add (r + 1, -k);

		return ;

	}

	int mid = l + r >> 1, left = x << 1, right = left | 1;

	if (R <= mid)
		change (left, l, mid, L, R);
	else if (L > mid)
		change (right, mid + 1, r, L, R);
	else
		change (left, l, mid, L, mid), change (right, mid + 1, r, mid + 1, R);

	tr[x] = __gcd (__gcd (tr[left], tr[right]), abs (find (mid + 1) - find (mid)));
//	cerr << x << ':' << l << '~' << r << ':' << find (l) << ',' << tr[x] << '\n';
	return ;

}

ll find (int x, int l, int r, int L, int R) {
//	cerr << x << ':' << l << '~' << r << ':' << find (l) << ',' << tr[x] << '\n';
	if (l == L && r == R)
		return __gcd (abs (find (l)), tr[x]);

	int mid = l + r >> 1, left = x << 1, right = left | 1;

	if (R <= mid)
		return find (left, l, mid, L, R);

	if (L > mid)
		return find (right, mid + 1, r, L, R);

	return __gcd (__gcd (find (left, l, mid, L, mid), find (right, mid + 1, r, mid + 1, R)), abs (find (mid + 1) - find (mid)));

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> n >> m;

	for (int i = 1; i <= n; ++ i)
		cin >> a[i];

	build (1, 1, n);

	while (m --) {

		cin >> op >> l >> r;

		if (op == 'C')
			cin >> k, change (1, 1, n, l, r);
		else
			cout << find (1, 1, n, l, r) << '\n';

	}
//	for (int i = 1; i <= n; ++ i) cerr << find (1, 1, n, i, i) << ' ';
	return 0;

}
/*
5 1
1 3 5 7 9
Q 1 5
*/

WA代码:https://www.luogu.com.cn/record/163139736

//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

# include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

int n, m, l, r;

ll tr[2000005], tree[2000005], k, a[500005];

char op;

void add (int x, ll y) {

	while (x <= n)
		tree[x] += y, x += x & -x;

	return ;

}

ll find (int x) {

	ll sum = 0;

	while (x)
		sum += tree[x], x ^= x & -x;

	return sum;

}

void build (int x, int l, int r) {

	if (l == r) {

		add (l, a[r] - a[l - 1]);

		return ;

	}

	int mid = l + r >> 1, left = x << 1, right = left | 1;

	build (left, l, mid), build (right, mid + 1, r);

	tr[x] = __gcd (__gcd (tr[left], tr[right]), abs (find (mid + 1) - find (mid)));

	return ;

}

ll find (int x, int l, int r, int L, int R) {
//	cerr << x << ':' << l << '~' << r << ':' << find (l) << ',' << tr[x] << '\n';
	if (l == L && r == R)
		return __gcd (abs (find (l)), tr[x]);

	int mid = l + r >> 1, left = x << 1, right = left | 1;

	if (R <= mid)
		return find (left, l, mid, L, R);

	if (L > mid)
		return find (right, mid + 1, r, L, R);

	return __gcd (__gcd (find (left, l, mid, L, mid), find (right, mid + 1, r, mid + 1, R)), abs (find (mid + 1) - find (mid)));

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> n >> m;

	for (int i = 1; i <= n; ++ i)
		cin >> a[i];

	build (1, 1, n);

	while (m --) {

		cin >> op >> l >> r;

		if (op == 'C')
			cin >> k, add (l, k), add (r + 1, -k);
		else
			cout << find (1, 1, n, l, r) << '\n';

	}
//	for (int i = 1; i <= n; ++ i) cerr << find (1, 1, n, i, i) << ' ';
	return 0;

}
/*
5 1
1 3 5 7 9
Q 1 5
*/

修改地方:感觉原先代码的change屁用没有,然后改成直接在主函数里写了一个,为什么WA?

2024/6/26 20:21
加载中...