码风良好,样例能过,提交全WA,求调
查看原帖
码风良好,样例能过,提交全WA,求调
1266620
duxingpeng楼主2025/1/31 18:03
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,s,t) for(register ll i = s;i <= t;++i)
#define per(i,t,s) for(register ll i = t;i >= s;--i)
struct segment_tree
{
	ll l;
	ll r;
	ll sum;
	ll tag;
};
ll n;
ll q;
ll a[1000005] = {};
segment_tree t[10000005];
inline ll read()
{
	ll x = 0;
	ll y = 1;
	char c = getchar();
	while(c < '0' || c > '9')
	{
		if(c == '-')
			y = -y;
		c = getchar();
	}
	while(c >= '0' && c <= '9')
	{
		x = (x << 3) + (x << 1) + (c - '0');
		c = getchar();
	}
	return x * y;
}
inline void write(ll x)
{
	if(x < 0)
	{
		putchar('-');
		write(abs(x));
		return;
	}
	if(x > 9)
		write(x / 10);
	putchar(x % 10 + '0');
}
inline ll lson(ll p)
{
	return p << 1;
}
inline ll rson(ll p)
{
	return p << 1 | 1;
}
inline void push_up(ll p)
{
	t[p].sum = t[lson(p)].sum + t[rson(p)].sum;
}
inline void push_down(ll p)
{
	t[lson(p)].tag += t[p].tag;
	t[lson(p)].sum += t[p].tag * (t[lson(p)].r - t[lson(p)].l + 1);
	t[rson(p)].tag += t[p].tag;
	t[rson(p)].sum += t[p].tag * (t[rson(p)].r - t[rson(p)].l + 1);
	t[p].tag = 0;
}
inline void build(ll p,ll l,ll r)
{
	t[p].l = l;
	t[p].r = r;
	if(l == r)
	{
		t[p].sum = a[l];
		return;
	}
	ll mid = l + r >> 1;
	build(lson(p),l,mid);
	build(rson(p),mid + 1,r);
	push_up(p);
}
inline void update(ll p,ll l,ll r,ll k)
{
	if(t[p].l >= l && t[p].r <= r)
	{
		t[p].sum += k * (t[p].r - t[p].l + 1);
		t[p].tag += k;
		return;
	}
	push_down(p);
	ll mid = t[p].l + t[p].r >> 1;
	if(l <= mid)
		update(lson(p),l,mid,k);
	if(r > mid)
		update(rson(p),mid + 1,r,k);
	push_up(p);
}
inline ll query(ll p,ll l,ll r)
{
	if(t[p].l >= l && t[p].r <= r)
		return t[p].sum;
	push_down(p);
	ll ans = 0;
	ll mid = t[p].l + t[p].r >> 1;
	if(l <= mid)
		ans += query(lson(p),l,mid);
	if(r > mid)
		ans += query(rson(p),mid + 1,r);
	return ans;
}
int main()
{
	n = read();
	q = read();
	rep(i,1,n)
		a[i] = read();
	build(1,1,n);
	rep(i,1,q)
	{
		ll opt = 0;
		opt = read();
		if(opt == 1)
		{
			ll l = 0;
			ll r = 0;
			ll k = 0;
			l = read();
			r = read();
			k = read();
			update(1,l,r,k);
		}
		else
		{
			ll l = 0;
			ll r = 0;
			l = read();
			r = read();
			write(query(1,l,r));
			putchar('\n');
		}
	}
	return 0;
}
2025/1/31 18:03
加载中...