求助!最后三个样例不能通过wa,找不出原因
查看原帖
求助!最后三个样例不能通过wa,找不出原因
426378
z1145674456楼主2021/9/1 14:47
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000001
unsigned long long sum[maxn << 2], add[maxn << 2], a[maxn], n, k[maxn << 2],m;


void pushup(long long rt)
{
	sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}

void build(long long  l, long long r, long long rt)
{
	if (l == r)
	{
		sum[rt] = a[l];
		return;
	}
	long long m = (l + r) >> 1;
	build(l, m, rt << 1);
	build(m + 1, r, rt << 1 | 1);
	pushup(rt);
}
void updata(long long L, long long c, long long l, long long r, long long rt)
{
	if (l == r)
	{
		sum[rt] += c;
		return;
	}
	long long m = (l + r) >> 1;
	if (L <= m)updata(L, c, l, m, rt << 1);
	else
	{
		updata(L, c, m + 1, r, rt << 1 | 1);
	}
	pushup(rt);
}
void pushdown(long long rt, long long ln, long long rn)
{
	if (add[rt])
	{
		add[rt << 1] += add[rt];
		add[rt << 1 | 1] += add[rt];
		sum[rt << 1] += add[rt] * ln;
		sum[rt << 1 | 1] += add[rt] * rn;
		add[rt] = 0;
	}
}
void upareadata(long long L, long long R, long long c, long long l, long long r, long long rt)
{
	if (L <= l && r <= R)
	{
		sum[rt] += c * (r - l + 1);
		add[rt] += c;
		return;
	}
	long long m = (l + r) >> 1;
	pushdown(rt, m - l + 1, r - m);
	if (L <= m)upareadata(L, R, c, l, m, rt << 1);
	if (R > m)upareadata(L, R, c, m + 1, r, rt << 1 | 1);
	pushup(rt);

}
int query(long long L, long long R, long long l, long long r, long long rt)
{
	if (L <= l && r <= R) {
		return sum[rt];
	}
	long long m = (l + r) >> 1;
	pushdown(rt, m - l + 1, r - m);
	long long ans = 0;
	if (L <= m)ans += query(L, R, l, m, rt << 1);
	if (m < R)ans += query(L, R, m + 1, r, rt << 1 | 1);
	return ans;
}
int main()
{
	long long type, w, b, c, z, x;
	scanf("%lld%lld", &n, &m);
	for (long long i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	build(1, n, 1);
	while (m--)
	{
		scanf("%lld", &type);
		switch (type)
		{
		case 1:
			scanf("%lld%lld%lld", &w, &b, &c);
			upareadata(w, b, c, 1, n, 1);
			break;
		case 2:
			scanf("%lld%lld", &z, &x);
			printf("%lld\n", query(z, x, 1, n, 1)); 
			break;
		}
	}

	return 0;
}
2021/9/1 14:47
加载中...